函数遇到问题是抛出错误好还是约定返回值好

更新时间:02-10 教程 由 曼雁 分享

函数遇到问题是抛出错误好还是约定返回值好?

结论:不说那个好,抛出几个例子,题主您看看,哪个更好。

前言

就跟老师讲课一样,直接给说一个定理,一个结论,太抽象,我都不知道这是什么呢,你就告诉我要怎么用?

所以本文用代码样例,告诉你哪个才是更好的选择。

手动控制异常

python的异常信息,可以手动显式抛出,像下面这样。

使用raise关键字,抛出ValueError异常。那么执行后就可以异常中断。

使用try - catch 结构捕捉异常信息,可以写入日志,或控制台打印。

这样不会中断程序,继续运行,在线上的代码,尤其如此。

上图示例,一个没有被捕捉到的异常,中断了程序运行。

最佳实践

如何正确而优雅无害地控制抛出异常呢?上段我们使用的两种方式,手动修改了execption message内容,这样看起来错误信息很直观,可是不利于排查故障点。

所以最佳实践上,可以从这些点出发。

1 - 不要修改异常信息

将程序的错误信息,捕捉到之后,输出到日志文件。

2 - 使用sys.exc_info()保留堆栈追踪和错误值

如图,sys.exec_info()返回错误类型,值,和堆栈信息,方便定位。执行起来大概是这样的。

不过要注意的是 python2和python3略有区别。python3你可以使用异常信息链式追踪。

类似上述方式。

一个长列表:python有哪些异常

下面列出了python内29个异常的详细情况。

这些都是在程序运行中可能抛出的,也是程序员可以在程序中手动抛出的异常类型。

结语

一般写小型的脚本处理函数,可以手动控制异常,这也是python的常见做法。

而大型的框架,一般对异常类型做了深层次的封装,不同类型的库,抛出不同的异常。

面向对象的写法,可以很容易用继承的方式处理异常。

我是@程序员小助手,持续分享编程与程序员成长相关的内容,欢迎关注~~

声明:关于《函数遇到问题是抛出错误好还是约定返回值好》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2300710.html