我从来没有真正使用过
finally
,所以我想在更频繁地使用它之前测试一些东西。跑步时我注意到:
def f():
try:
1/0
# 1/1
except:
print('except') # 1
raise # 2
finally:
print('finally') # 3
try:
f()
except:
print("haha")
我们得到这个执行顺序:
except
finally
haha
执行顺序的规则是什么?
据我所见,我得到了这条规则:
except
块中的所有内容,但不运行raise
语句,如果存在任何此类语句finally
块except
块,并运行最后一个raise
语句,ifpresent正确吗?
[Python.Docs]:定义清理操作(强调是我的,但请阅读所有项目符号):
- 执行 except 或 else 子句期间可能会发生异常。同样,在执行 finally 子句后重新引发异常。