2012-07-06 36 views
3

我發現sys.excepthook的工作方式令人費解。 鑑於以下情況,我並沒有找到一種方法,以防止異常被鉤住。 總之,我從來沒有達到印刷聲明,但我相信理論上可以繼續。 返回正確或錯誤也沒有幫助嗎?python中的sys.excepthook行爲

import sys 
from shutil import copy 
from subprocess import Popen 


def my_except_hook(etype, value, tb): 
    print("got an exception of type", etype) 


if __name__ == '__main__': 
    sys.excepthook = my_except_hook 
    copy('sdflsdk') 
    print("here") 
    Popen('sdflkjdklsdj') 

的輸出是:

('got an exception of type', <type 'exceptions.TypeError'>) 
+0

爲了獲得更多的(信息)出你的所有的Python異常處理參見[Python的旅遊#2:以異常(HTTP:// boodebr.org/main/python/tourist/taking-exception)文章。 – martineau 2012-07-06 16:35:02

回答

2

sys.excepthook實際上並不打算強制進入VB風格的「On Error Resume Next」。可能有辦法做到這一點,但你應該真的包裝自己的代碼來做到這一點。 system.excepthook是爲python交互式解釋器之類的東西設計的,以便它們打印異常並返回到交互式shell。要做到你要求,你應該考慮做這樣的事情的簡歷行爲:

import sys 
from shutil import copy 
from subprocess import Popen 

if __name__ == '__main__': 
    try: 
     copy('sdflsdk') 
    except: 
     pass 
    print("here") 
    try: 
     Popen('sdflkjdklsdj') 
    except: 
     pass 
3

不,這是不可能繼續在理論上。 sys.excepthook僅在整個堆棧解開時才被調用,並且在程序退出之前沒有找到異常處理程序。沒有什麼地方可以繼續,除了退出計劃。你確定你不是在尋找try...except聲明嗎?