我是Python的新手。我只是想知道在finally
块中调用sys.exit(0)
后except
块执行的原因是什么?
代码:
import sys
def sumbyzero():
try:
10/0
print "It will never print"
except Exception:
sys.exit(0)
print "Printing after exit"
finally:
print "Finally will always print"
sumbyzero()
顺便说一句,我只是尝试做与Java中相同的事情,当finally
在System.exit(0)
中时,catch
块 执行<{1}}阻止。
答案 0 :(得分:72)
所有sys.exit()
都会引发类型SystemExit
的异常。
退出Python。这是通过提高
SystemExit
来实现的 异常,因此finally
的{{1}}子句指定的清除操作 声明被尊重,并且可以拦截出口 尝试在外层。
如果你运行以下内容,你会亲眼看到:
try
作为替代方案,os._exit()
将阻止此过程绕过大部分清理,包括import sys
try:
sys.exit(0)
except SystemExit as ex:
print 'caught SystemExit:', ex
块等。
答案 1 :(得分:6)
关于你的例子:
在离开try语句之前总是执行finally子句, 是否发生了例外。
这是来自Python文档的Error and Exceptions部分。所以 - 除非你使用os._exit()
,否则你的finally块将始终在你展示的例子中执行。但你应该明智地使用它......