python 错误处理

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


在必要的时候才定义我们自己的错误类型

 

朝闻道
原文地址:https://www.cnblogs.com/wander-clouds/p/8461081.html