如何在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”關鍵字簡單地忽略它。

更新於:2023年2月22日

3萬+ 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告