为什么除了except和finally块都在这里执行? [重复]

问题描述 投票:0回答:2
from sys import exit

try:
   print("try")
   exit(0)
except:
   print("except")
finally:
   print("finally")

程序应该在exit(0)处终止,不是吗?为什么输出:

try
except
finally

python python-3.x exception try-except try-finally
2个回答
0
投票

因为sys.exit just raises SystemExit,并且sys.exit到达(在主线程中的)顶部堆栈框架,这导致解释器关闭。

这就是为什么您通常不应该捕获裸露的SystemExit(也通常至少应使用SystemExit的原因之一:它将捕获SystemExit(和KeyboardInterrupt),这通常not想要。


0
投票

请参见except。值得注意的是:

这是通过引发SystemExit异常来实现的,因此,使用了try语句的finally子句指定的清除操作,并且有可能在外部级别拦截出口尝试。

所以您捕获了异常,并且在完成except Exception块之后,脚本正常退出,而不是因为您调用了sys.exit。您还可以将脚本更改为以非零的退出代码退出,然后查看脚本仍然以退出代码0退出。

© www.soinside.com 2019 - 2024. All rights reserved.