重新提出例外情況
有時你只是為了檢查它而捕獲異常,例如用於記錄目的。檢查後,你希望異常繼續像之前一樣傳播。
在這種情況下,只需使用沒有引數的 raise
語句。
try:
5 / 0
except ZeroDivisionError:
print("Got an error")
raise
但請記住,呼叫者堆疊中的某個人仍可以捕獲異常並以某種方式處理它。在這種情況下,完成的輸出可能是令人討厭的,因為它會在任何情況下發生(捕獲或未捕獲)。因此,提出一個不同的異常可能是一個更好的主意,包含你對該情況的評論以及原始異常:
try:
5 / 0
except ZeroDivisionError as e:
raise ZeroDivisionError("Got an error", e)
但是這樣做的缺點是將異常跟蹤減少到這個 raise
,而沒有引數的 raise
保留了原始的異常跟蹤。
在 Python 3 中,你可以使用 raise
-from
語法保留原始堆疊:
raise ZeroDivisionError("Got an error") from e