CodeGym /課程 /Python SELF TW /多重例外處理

多重例外處理

Python SELF TW
等級 17 , 課堂 3
開放

4.1 捕捉多個例外

Python允許通過多個except區塊或一個包含例外的元組except區塊來處理多個例外。讓我們來看看這兩種方法。

多個except區塊

你可以使用多個except區塊來針對不同類型的例外進行不同的處理。


try:
    # 可能引發例外的代碼
    result = int("abc")
except ValueError:
    print("錯誤:無效值。")
except ZeroDivisionError:
    print("錯誤:除以零。")

單個包含例外元組的except區塊

你可以在一個except區塊中處理多個例外,只需將它們作為元組傳遞。


try:
    # 可能引發例外的代碼
    result = int("abc")
except (ValueError, ZeroDivisionError) as e:
    print(f"發生錯誤:{e}")

使用 except NameError as var

當處理例外時,你可以使用語法 except <ExceptionType> as <variable> 來獲取例外對象。這允許你訪問關於例外的信息,例如錯誤消息和其他屬性。


try:
    # 可能引發 NameError 的代碼
    print(undeclared_variable)
except NameError as e:
    print(f"發生錯誤:{e}")
    print(f"錯誤類型:{type(e)}")

4.2 錯誤變數的作用域

儲存例外的變數(在上面的例子中為 e僅在其except區塊內可用。在該區塊之外,變數不可用。


try:
    # 可能引發 NameError 的代碼
    print(undeclared_variable)
except NameError as e:
    print(f"發生錯誤:{e}")
    print(f"錯誤類型:{type(e)}")
# 這裡 e 已經不可用,下一行將引發 NameError
# print(e)  # NameError: name 'e' is not defined

如果你想在其區塊之外對例外進行一些重要的處理,那麼你需要將它儲存到一個單獨的變數中。例如:


exception = None
try:
    # 可能引發例外的代碼
    result = int("abc")
except ValueError as e:
    exception = e
    print("錯誤:無效值。")
except ZeroDivisionError as e:
    exception = e
    print("錯誤:除以零。")

print(exception)

請注意,變數exception保存了最後發生的例外,這在try區塊之外的後續處理中可能會有所幫助。

4.3 錯誤中有什麼有用的信息

例外對象包含關於錯誤的信息。根據例外類型,對象可能包含不同的屬性。

以下是大多數例外可用的一些常見屬性:

  • args:包含創建例外時傳遞的參數的元組。通常是錯誤消息。
  • message:包含錯誤消息的字符串(在某些例外中)。
  • __str__:返回例外字符串表示的方法。此方法用於從例外對象中獲取文本表示,這會在使用print()函數打印例外對象時返回。

範例:


try:
    # 可能引發 ValueError 的代碼
    result = int("abc")
except ValueError as e:
    print(f"發生錯誤:{e}")
    print(f"錯誤參數:{e.args}")
    print(f"錯誤消息:{str(e)}")

多重例外處理示例


try:
    # 可能引發多種類型例外的代碼
    result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
    print(f"發生錯誤:{e}")
    print(f"錯誤類型:{type(e)}")
    print(f"錯誤參數:{e.args}")

如果發生ValueErrorZeroDivisionError,則會被except區塊捕捉。通過變數e可以訪問例外信息。輸出將包含錯誤類型和創建例外時傳遞的參數。

2
任務
Python SELF TW, 等級 17, 課堂 3
上鎖
獲取數字。
獲取數字。
2
任務
Python SELF TW, 等級 17, 課堂 3
上鎖
從異常中提取信息
從異常中提取信息
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION