请考虑以下代码:
try:
raise Exception("a")
except:
try:
raise Exception("b")
finally:
raise
这会引发Exception: a
。我希望它能提升Exception: b
(我需要解释原因吗?)。为什么最终raise
提出原始异常而不是(我认为)是最后一个例外?
答案 0 :(得分:26)
Raise正在重新引发你抓到的最后一个异常,而不是你提出的最后一个异常
(为了清晰起见,从评论转发)
答案 1 :(得分:15)
在python2.6上
我猜,你期望finally块与“try”块绑在一起,你可以在其中引发异常“B”。 finally块附加到第一个“try”块。
如果在内部try块中添加了except块,则finally块将引发异常B。
try:
raise Exception("a")
except:
try:
raise Exception("b")
except:
pass
finally:
raise
输出:
Traceback (most recent call last):
File "test.py", line 5, in <module>
raise Exception("b")
Exception: b
解释此处发生的另一种变体
try:
raise Exception("a")
except:
try:
raise Exception("b")
except:
raise
输出:
Traceback (most recent call last):
File "test.py", line 7, in <module>
raise Exception("b")
Exception: b
如果你看到这里,用except替换finally块会引发异常B.