2013-04-22 139 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語句捕獲。