Python 3 中是否有標準的異常鏈處理方式?
在處理一個異常“A”的過程中,可能會發生另一個異常“B”。在 Python 2.0 版本中,如果發生這種情況,異常 B 會向外傳播,而異常 A 會丟失。為了除錯問題,瞭解這兩個異常都很有用。
有時,異常處理程式需要故意重新引發異常,無論是為了提供額外資訊還是將異常轉換為另一種型別。`__cause__` 屬性提供了一種顯式記錄異常直接原因的方法。
異常鏈僅在 Python 3 中可用。Python 3 使用 `raise ... from` 語句來鏈式處理異常。我們使用 `raise..from` 語句改寫了給定的程式碼,如下所示。
try: s = {‘a’:1, ‘b’:2}['c'] except KeyError as e: raise ValueError('failed') from e
Python 3 預設會顯示異常處理期間發生的所有異常,如下所示。
Traceback (most recent call last): File "source_file.py", line 2, in <module> s = {'a':1, ‘b’:2}['c'] KeyError: 'c'
上述異常是以下異常的直接原因。
Traceback (most recent call last): File "source_file.py", line 4, in <module> raise ValueError('failed') from e ValueError: failed
廣告