4

我尝试退出脚本,但它没有退出。

这是我的代码:

import sys

try:
    ...
    print "I'm gonna die!"
    sys.exit()
except:
    ...

print 'Still alive!'

结果是:

I'm gonna die!
Still alive!

为什么?

4

3 回答 3

22

您正在SystemExit通过一揽子except条款发现例外情况。不要那样做。始终指定您希望避免这些事情的例外情况。

于 2013-04-22T13:03:16.317 回答
1

sys.exit()是通过引发SystemExit异常来实现的,因此由 finally 指定的清理操作,try 语句的 except 子句得到尊重,并且可以在外部级别拦截退出尝试。

在您的示例SystemExit中,被以下except语句捕获。

于 2013-04-22T13:04:55.640 回答
1

如果你确实需要立即退出,并且想跳过正常的退出处理,那么你可以使用os._exit(status). 但是,正如其他人所说,使用正常路径退出通常要好得多,而不是捕获SystemExit异常。当我们谈到这个话题时,KeyboardInterrupt您可能不想抓住另一个例外。(使用except Exception不会捕获SystemExitKeyboardInterrupt。)

于 2013-04-23T19:10:58.413 回答