捕获错误
try:
print('try...')
r = 10 / 0
print('result:', r)
except ZeroDivisionError as e:
print('except:', e)
finally:
print('finally...')
print('END')
但是finally如果有,则一定会被执行(可以没有finally语句)。
ython所有的错误都是从BaseException
类派生的,常见的错误类型和继承关系看这里:
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
抛出错误
因为错误是一个类,捕获一个错误就是捕获到该class的一个实例,python内置函数会抛出很多类型的错误,若要抛出错误,首先根据需求,定义一个错误的class,选择好继承关系,然后用raise语句抛出一个错误的实例
def foo(s):
n = int(s)
if n==0:
raise ValueError('invalid value: %s' % s)
return 10 / n
def bar():
try:
foo('0')
except ValueError as e:
print('ValueError!')
raise
bar()