通常,try/except
子句用於處理錯誤和異常,並捕獲它們並採取相應措施。但是,假設有一個腳本,並且用戶不確定可以引發異常的位置。現在,除了應用try /外,還有任何模塊或裝飾器可以捕獲發生的異常並簡單地讓程序不中斷?如何停止python腳本終止?
編輯:這不能是嘗試/除了問題的重複。當然,我知道這一點,可以將其應用到我知道可能發生異常的所有可能的地方。我特別尋找一些處理異常處理的模塊或裝飾器。在錯誤發生之前調用的內建函數也可以解決問題。
通常,try/except
子句用於處理錯誤和異常,並捕獲它們並採取相應措施。但是,假設有一個腳本,並且用戶不確定可以引發異常的位置。現在,除了應用try /外,還有任何模塊或裝飾器可以捕獲發生的異常並簡單地讓程序不中斷?如何停止python腳本終止?
編輯:這不能是嘗試/除了問題的重複。當然,我知道這一點,可以將其應用到我知道可能發生異常的所有可能的地方。我特別尋找一些處理異常處理的模塊或裝飾器。在錯誤發生之前調用的內建函數也可以解決問題。
處理異常的正確方法是在可能引發異常的代碼段周圍使用try
/except
塊。有時這意味着在try
/except
區塊中包裝您的main()
函數(或其他功能運行整個程序)。沒關係。如果你想完全忽略這個例外,你可以使用contextlib.suppress
,這也很好,並且可以節省你幾行代碼。現在
,如果由於某種原因,你需要對捕獲的異常反應,你是不是能夠圍繞相關的代碼與try
/except
,您可以設置sys.excepthook
到接受異常信息作爲參數,並實現了一個功能不管你想要什麼,例如記錄異常。這是一個相當粗糙的機制,但我不推薦在正常情況下使用它。 (據我所知,它不能阻止異常被提出,如果這就是你所要求的 - 它只能讓你有機會運行你自己的代碼,然後堆棧展開並結束程序。)
半認真答案https:// github.com/ajalt/fuckitpy – agomcas
讓程序不中斷?但它會做什麼,而不是「不要打破」。你所要求的是,現在只是不能爲此命名。 –
@ Jean-FrançoisFabre假設有一個循環運行在一堆列表上執行一些任務。現在,列表元素之一是用戶不知道的意外類型。但主要優先級是跳過它,不要退出程序並繼續處理其他列表元素。 –
在複製建議中,有一個關於「壓制」上下文管理器的回答。我認爲這就是你需要的。 '從contextlib導入抑制' –