异常处理
在程序中,如果出现异常,我们需要捕捉异常,终止程序(可能的话),并且提示错误信息。
写好异常处理,对于debug有很大的好处,可以帮助我们捕捉到错误所在的位置,以及错误的原因。
try-except语句
python使用try-case语句来捕捉异常,在try内执行逻辑正常时的运行代码,在except里写下出现不同类型错误时的处理方式。
int方法在读到无法转换为int的输入时,会抛出ValueError
,try-except捕捉到抛出的ValueError
,进入到对应的分支。
抛出异常
有了捕捉异常的语句,那么我们需要在一些函数里抛出异常,以便在外界调用函数时捕捉异常。
raise RuntimeError('What a kerfuffle')
如果不是被try-except捕捉到的异常,那么程序会直接终止。
异常类型
def test():
raise RuntimeError('123')
try:
print('good')
test()
print('bad')
except RuntimeError as e:
print(e, type(e))
finally:
print('over')
输出
good
123 <class 'RuntimeError'>
over
每一个异常都有一个类型,每一个类型就是一个类,例如RuntimeError和ValueError,我们可以用as来获得异常实例,并且进行一定的处理。注意,异常看起来像一个字符串,但其实异常是一个类,例如这里的e的类型是RuntimeError。
捕捉多个异常
使用多个except,如果有多个异常有相同的处理方式,可以放在一个tuple内处理。
可以使用except Exception来捕获所有的异常,但是不建议这么用 。
finally
不论是正常执行,还是出现异常,都会运行的代码部分,一般是用于资源的释放。