2012-06-05 93 views
3

我知道sys.exit()提出了一個退出例外,所以當我跑這我知道它會不會退出:退出蟒蛇正確

In [25]: try: 
    ....:  sys.exit() 
    ....: except: 
    ....:  print "oops" 
    ....:  
oops 

但我認爲os._exit()的目的是退出使用C調用,但它也造成一個例外:

In [28]: try: 
    ....:  os._exit() 
    ....: except: 
    ....:  print "oops" 
    ....:  
oops 

有沒有辦法做到這一點,而不殺死PID?

+1

你不應該使用'except'沒有具體例外。 – msvalkon

回答

4

不要沒有Exception類使用except,所以sys.exit將只是正常工作,而不會觸發異常處理:

>>> import sys 
>>> try: 
...  sys.exit() 
... except Exception: 
...  print 'oops' 
... 
$ 

有被觸發的普通條款除外其他異常(和一般的不應該't),尤其是KeyboardInterrupt

+1

我知道這是傳統的看法 - 甚至更多地使用狹義指定的*特定*異常。但是當你要捕獲每個異常並且不打算使用異常數據(例如contra @ mgilson的答案)時,除Exception之外是否有任何優點?是否有任何非''exception'可能性會觸發'except'子句? –

+0

-1:這是怎麼回答這個問題? –

+0

@ire_and_curses這會在不觸發異常處理程序的情況下退出進程。 – schlamar

9

我不知道我理解你的問題,但os._exit沒有引發異常 - 你用錯誤數量的參數調用os._exit是:

try: 
    os._exit() 
except Exception as e: 
    print e 

#output: _exit() takes exactly 1 argument (0 given)