一、前言
本章主要解决一下前文曾提到的两个东西:模块、异常。
事实上这两个之间并没有什么直接的关联,写在同一章的原因仅仅只是因为只写一个的话,会导致篇幅太短,因为都很简单。
二、异常
我们首先来聊聊异常,这是很多高级语言都拥有的一个特性。
它并非什么高大上的东西,其仅仅只是一种程序错误的处理方式。
较低级的语言不使用它的原因很简单:对程序的性能影响较大,所以一般会更倾向于通过返回值来判断。
但对于像python
这种高级语言,那就无所谓了,异常几乎随处可见,与java
差不多。
为了更好理解异常,首先我们来看看低级语言是如何处理错误的:
def divi(a, b):
if b == 0:
return None
return a / b
ret = divi(10, 0)
if ret == None:
print("函数运行出错")
else:
print(f'10/0={ret}')
就像上面这个函数一样,求两个数相除的结果,而除数b是不能为0的对吧?
所以如果这个函数检测到了b为0,那就可以通过返回None
来代表当前函数出现了错误。
None
在python中代表一个特殊的“空值”。
这种方法虽然效率较高,但对于我们程序员来说并不友好,你只知道这个函数调用出错了,但你却无法通过返回的None
值知道具体错误的原因!
而这时就可以使用异常来替换上面的这种方式,上面的代码改为异常就是下面这样:
def divi(a, b):
if b == 0:
raise ValueError('除数不能为0!')
return a / b
ret = divi(10, 0)