from sys import exit
try:
print("try")
exit(0)
except:
print("except")
finally:
print("finally")
程序应该在exit(0)处终止,不是吗?为什么输出:
try
except
finally
因为sys.exit
just raises SystemExit
,并且sys.exit
到达(在主线程中的)顶部堆栈框架,这导致解释器关闭。
这就是为什么您通常不应该捕获裸露的SystemExit
(也通常至少应使用SystemExit
的原因之一:它将捕获SystemExit(和KeyboardInterrupt),这通常not想要。
请参见except
。值得注意的是:
这是通过引发SystemExit异常来实现的,因此,使用了try语句的finally子句指定的清除操作,并且有可能在外部级别拦截出口尝试。
所以您捕获了异常,并且在完成except Exception
块之后,脚本正常退出,而不是因为您调用了sys.exit
。您还可以将脚本更改为以非零的退出代码退出,然后查看脚本仍然以退出代码0退出。