Python 中的多個異常

Manav Narula 2023年1月30日 2021年4月29日
  1. 使用逗號和括號來捕獲多個異常
  2. 使用 suppress() 函式捕獲多個異常
Python 中的多個異常

在程式設計中,發生的異常會干擾程式的正常流程。在 Python 中,它表示為錯誤。根據異常的原因,異常的型別可以不同,例如 IndexError,KeyError 等。

我們可以使用 tryexcept 塊來處理異常。try 塊包含一些可能引發異常的程式碼,如果引發異常,則可以在 except 塊中指定備用程式碼。

例如,

try:
    print(5/0)
except:
    print(5/1)

輸出:

5

5/0 引發異常,因此它將執行 except 塊中的程式碼。

請注意,也可以使用 raise 關鍵字手動引發異常。

我們還可以處理 Python 中的多個異常。我們知道 Python 中有不同型別的異常,因此對於不同的異常,我們可以有多個 except 語句。

例如,

try:
    raise ValueError()
except ValueError:
    print("Value Error")
except KeyError:
    print("Key Error")

輸出:

Value Error

一個 except 語句也可以捕獲多個異常。這些方法將在下面討論。

使用逗號和括號來捕獲多個異常

實現此目的的第一種方法是用逗號分隔例外並將其放在括號中。以下程式碼顯示瞭如何。

try:
    raise ValueError()
except (ValueError, KeyError):
    print("Error")

輸出:

Error

如果遇到括號中提到的異常,則執行該塊中的程式碼。我們還可以為異常物件(也稱為錯誤物件)分配一些名稱。e 是錯誤物件的最常用名稱。例如,

try:
    raise ValueError()
except (ValueError, KeyError) as e:
    print("Error")

輸出:

Error

as 關鍵字為物件名稱建立別名。在 Python 2.5 以下,可以通過簡單地使用逗號分隔錯誤物件的名稱來消除 as 關鍵字的使用,如下所示。

try:
    raise ValueError()
except (ValueError, KeyError), e:
    print("Error")

輸出:

Error

使用 suppress() 函式捕獲多個異常

contextlib 庫提供了一個非常有用的名為 suppress() 的函式,該函式還可用於處理多個異常。

此函式將 tryexceptpass 語句組合到一行程式碼中。它與 with 語句一起使用,該語句也用於異常處理,並使程式碼更清晰易讀。

以下程式碼顯示瞭如何使用此函式。

from contextlib import suppress

with suppress(FileNotFoundError):
    os.remove('somefile.tmp')

上面的程式碼與帶有 tryexceptpass 語句的以下程式等效。

try:
    os.remove('somefile.tmp')
except FileNotFoundError:
    pass

當我們不想執行任何操作但要避免空程式碼出現任何錯誤時,可以使用 pass 語句。

我們可以對多個異常使用 suppress 函式,如下所示。

from contextlib import suppress

with suppress(FileNotFoundError, KeyError):
    os.remove('somefile.tmp')
Author: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相關文章 - Python Exception