【发布时间】:2018-08-22 01:49:01
【问题描述】:
对于 Python 中任何可能的 try-finally 块,是否保证始终执行 finally 块?
例如,假设我在 except 块中返回:
try:
1/0
except ZeroDivisionError:
return
finally:
print("Does this code run?")
或者也许我重新提出Exception:
try:
1/0
except ZeroDivisionError:
raise
finally:
print("What about this code?")
测试表明,finally 确实在上述示例中被执行,但我想还有其他我没有想到的场景。
是否存在finally 块在 Python 中无法执行的情况?
【问题讨论】:
-
我能想象到的唯一情况
finally无法执行或“失败”是在无限循环、sys.exit或强制中断期间。 documentation 声明finally总是被执行,所以我会这样做。 -
如果电源线从墙上扯下来,
finally将不会执行。 -
您可能对这个关于 C# 的同一问题的答案感兴趣:stackoverflow.com/a/10260233/88656
-
在一个空的信号量上阻止它。永远不要发出信号。完成。
-
@Xay
sys.exit除了抛出异常什么都不做。用词不当。
标签: python exception-handling try-catch-finally finally