如何在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”關鍵字簡單地忽略它。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP