finally块内抛出的Python异常优先级

0 投票
1 回答
30 浏览
提问于 2025-04-14 17:50

我有一些(python 3.12)代码,实际上应该放在一个“finally”块里,但不幸的是,这段代码在少数情况下可能会引发异常。想知道在“finally”块中引发的异常是否一定会优先于在异常处理块中显式重新引发的异常:

try:
    raise Exception('1')

except Exception as e:
    raise

finally:
    raise Exception('2')

这个效果如我所预期的那样(这段代码实际上引发了异常2)。如果能确认它一定是这样工作的就好了,因为我没有在教程中看到这个情况被列出来。

1 个回答

0

是的,在 finally 语句中发生的异常会优先于在 except 语句中重新抛出的异常:

如果 finally 语句抛出了另一个异常,那么之前保存的异常会被设置为新异常的上下文。

更多详细信息可以参考Python的官方文档:https://docs.python.org/3/reference/compound_stmts.html#finally-clause

撰写回答