考虑以下示例:
try:
print "Try this."
exit(0)
except:
print "Failed."
exit(1)
执行此简单示例时,将以下内容打印到stdout:
Try this.
Failed.
请原谅我,如果有明显的答案,或者已经有人问过,但为什么exit(0)
(应该给我一个干净的退出)抛出异常?
我尝试在实际用例脚本中使用try: except:
循环,并发现即使try
条件说明为exit(0).
所以我猜exit(0)
抛出某种(n隐藏?)异常,但为什么呢?它没有显示回溯(例如,当CTRL + C用于生成KeyboardInterrupt异常时),并导致意外行为,例如在我的情况下,我期待0返回并最终得到1回归。
退出python脚本的唯一方法是异常(任何异常)吗?
答案 0 :(得分:1)
此处引发的异常是SystemExit
例外。因此,如果你尝试:
try:
print "Try this."
exit(0)
except SystemExit:
pass
except:
print "Failed."
exit(1)
输出是:
Try this.
为防止这种情况发生,您可以调用os._exit()
直接退出,而不会抛出异常:
import os
try:
print "Try this."
os._exit(0)
except SystemExit:
pass
except:
print "Failed."
os._exit(1)
引用user2357112:
os._exit
跳过最后的块,上下文管理器__exit__
,退出处理程序和其他重要的清理,所以除了一些非常具体的案例(我相信大多数都涉及fork),它&#39 ;使用它不是一个好主意。