我是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()
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我只是试图做同样的事情,在Java中,其中finally的块未在执行时System.exit(0)是在catch块.
NPE*_*NPE 76
一切sys.exit()都是提出类型的例外SystemExit.
从文档:
退出Python.这是通过引发
SystemExit异常来实现的,因此遵循finally语句子句指定的清除操作try,并且可以拦截外部级别的退出尝试.
如果你运行以下内容,你会亲眼看到:
import sys
try:
sys.exit(0)
except SystemExit as ex:
print 'caught SystemExit:', ex
Run Code Online (Sandbox Code Playgroud)
作为替代方案,os._exit()将停止绕过大部分清理的过程,包括finally块等.