如何在Python中忽略異常並繼續執行?
異常是在程式執行過程中發生的意外錯誤或事件。程式中錯誤和異常的區別在於,遇到異常時,程式會偏離其原始執行路徑,而發生錯誤時,程式會終止。因此,與錯誤不同,異常是可以處理的。所以,你的程式不會崩潰。
但是,在某些Python情況下,異常可能不會導致程式終止,並且不會很大程度地影響執行方向。因此,最好忽略此類異常。有幾種方法可以做到這一點。
使用try/except塊
使用suppress()方法
使用try/except塊
Try/except塊允許你執行程式碼並使用“pass”語句跳過發生的任何錯誤。這實際上什麼也不做,但它會忽略發生的任何錯誤。下面可以看到此語句的語法。
try: code to be executed that may cause an exception except: pass
你也可以透過使用except語句後跟特定異常來忽略特定異常。例如,要忽略AttributeError異常,可以使用以下程式碼
try: # lines of code except AttributeError: pass
如果要忽略所有異常,可以使用以下程式碼:
try: # lines of code except Exception: pass
示例
在下面的示例中,讓我們對整數迭代地執行除法運算。使用for迴圈,我們將0-5範圍內的一個整數物件進行除法運算;但是零除法是不可能的,程式將引發ZeroDivisionError。此異常使用“pass”語句被忽略,並執行接下來的迭代。
a = 16 for i in range(5): try: print(a/i) except: pass
輸出
上面程式的輸出如下所示。程式忽略第一次迭代,因為第一次除法是零除法。
16.0 8.0 5.333333333333333 4.0
使用suppress()方法
另一種忽略異常的最佳方法,而不是使用try/except塊,是使用suppress()方法。此方法屬於Python中的contextlib模組。
但是,與try/except塊不同,如果在此上下文內引發異常,則Python直譯器將抑制其中的所有程式碼行。讓我們看一些例子來更好地理解這一點。
示例
在這個例子中,我們嘗試使用suppress()方法抑制/忽略零除法錯誤。
import contextlib a = 16 with contextlib.suppress(ZeroDivisionError): div = a/0 print("Zero division error is suppressed")
輸出
上面程式的輸出將如下產生:
Zero division error is suppressed
示例
即使suppress()方法上下文中的單行程式碼引發異常,此塊中包含的其他行也不會執行。這是此方法的唯一缺點。讓我們看一個演示相同的示例。
import contextlib a = 16 with contextlib.suppress(Exception): for i in range(5): print(a/i) print("The entire loop is not displayed")
輸出
執行上面的程式後,即使迴圈只有一次迭代引發異常,輸出也只會顯示上下文之外的語句:
The entire loop is not displayed
結論
在Python中,你可以使用“try...except”結構忽略異常並繼續處理。如果發生異常,“except”塊將被執行,你可以相應地處理異常。如果你不想處理異常,可以使用“pass”關鍵字簡單地忽略它。