2013-04-22 138 views
4

我尝试退出脚本,但它不退出。我退出()脚本,但它不退出

这里是我的代码:

import sys 

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

print 'Still alive!' 

而且结果是:

I'm gonna die! 
Still alive! 

为什么?

回答

1

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

+0

谢谢!这是我在这种情况下真正需要的。 – 2013-04-23 22:27:05

22

您正在使用您的毯子except子句捕捉SystemExit例外。不要这样做。总是指定你期望避免这些事情的例外。

+15

在这种情况下'except Exception'就足够了,因为'SystemExit'不会继承那个... – 2013-04-22 13:04:13

1

sys.exit()是通过引发SystemExit异常来实现的,所以清除最后指定的动作,除了try语句的子句外,并且可以在外层拦截退出尝试。

在你的例子中,SystemExit被以下except语句捕获。