这个
Python docs
有这个:
如果在执行try子句期间发生异常,则
例外情况可以通过except子句处理。如果没有例外
由exception子句处理,在
最后条款已经执行。
因此,在您的示例中,您没有捕获内部异常,这会导致
finally
要执行的块(在重新引发原始异常之前)。中国的例外
最后
在有机会重新引发原始异常之前,将其踢到外部块。外部块从未看到被零除的异常。
这与
return
从中的函数
最后
:
def ex_test():
try:
try:
1/0
finally:
return "finally"
except Exception as e:
print(e) # never gets here
ex_test()
# only prints "finally"
# never re-raises the exception
你
可以
获取有关原始异常的一些信息。从…起
the docs
:
在exception或finally中引发(或重新引发)异常时
条款
上下文
自动设置为上次捕获的异常;
如果新的异常没有得到处理,那么最终将进行回溯
显示的将包括原始异常和最终异常
例外
所以:
try:
try:
1/0
finally:
raise Exception("Exception!")
except Exception as e:
print(e.__context__)
# prints: "division by zero"