我尝试退出脚本,但它没有退出。
这是我的代码:
import sys
try:
...
print "I'm gonna die!"
sys.exit()
except:
...
print 'Still alive!'
结果是:
I'm gonna die!
Still alive!
为什么?
答案 0 :(得分:22)
您正在使用全局SystemExit
子句捕获except
例外。不要那样做。始终指定您希望避免这些事情的例外情况。
答案 1 :(得分:1)
sys.exit()
是通过引发SystemExit
异常来实现的,因此最终指定的清理操作除了try语句的子句之外,并且可以拦截外层的退出尝试。
在您的示例中SystemExit
由以下except
语句捕获。
答案 2 :(得分:1)
如果确实需要立即退出,并希望跳过正常退出处理,则可以使用os._exit(status)
。但是,正如其他人所说,使用正常路径退出通常要好得多,而不是抓住SystemExit
异常。虽然我们讨论的是主题,但KeyboardInterrupt
是您可能不想捕获的另一个例外。 (使用except Exception
将无法抓住SystemExit
或KeyboardInterrupt
。)