try...except...finally...的错误处理机制
例
try:
print('try...')
r = 10 / 0
print('result:', r)
except ZeroDivisionError as e:
print('except:', e)
finally:
print('finally...')
print('END')
在计算10 / 0时会产生一个除法运算错误
try...
except: division by zero
finally...
END
当错误发生时,后续语句print('result:', r)不会被执行,
except由于捕获到ZeroDivisionError,因此被执行。
最后,finally语句被执行。
可以有多个except来捕获不同类型的错误
try:
print('try...')
r = 10 / int('2')
print('result:', r)
except ValueError as e:
print('ValueError:', e)
except ZeroDivisionError as e:
print('ZeroDivisionError:', e)
else:
print('no error!')
finally:
print('finally...')
print('END')
可以跨越多层调用,
比如函数main()调用foo(),foo()调用bar(),
结果bar()出错了,
只要main()捕获到了,就可以处理
抛出错误
要抛出错误,首先根据需要,可以定义一个错误的class,选择好继承关系,然后,用raise语句抛出一个错误的实例:
# err_raise.py
class FooError(ValueError):
pass
def foo(s):
n = int(s)
if n==0:
raise FooError('invalid value: %s' % s)
return 10 / n
在必要的时候才定义我们自己的错误类型