![](/img/trans.png)
[英]python: recover exception from try block if finally block raises exception
[英]why is exception argument not caught by finally block in python
try:
...
except (SomeError) as err:
...
else:
...
finally:
if err:
...
這將產生錯誤:“未定義錯誤”。 因為就finally塊而言,未定義異常參數err。 這樣看來,異常參數是異常塊的局部變量。
您可以通過將err復制到塊外定義的另一個變量來解決這個問題:
teleport = ""
try:
...
except (SomeError) as err:
teleport = err
else:
...
finally:
if teleport:
...
但是,為什么不能簡單地在finally塊中引用異常參數呢? (假設我沒有忽略其他東西。)
try
塊將執行可能引發異常的代碼。 except
block會在引發異常時執行。 如果未引發except,則執行else
塊,無論如何執行finally
塊。
當您可以在else
塊中進行檢查時,沒有必要在finally
塊中檢查異常。
除此之外,該變量可能是在except
塊執行結束時收集的垃圾。 它類似於用什么發生了with
塊。 這就是為什么if err:
就不能做的原因if err:
您不能僅因為未引發異常而未定義變量,所以無法訪問,從而導致未定義的變量錯誤。 除了在最終塊中處理異常沒有任何意義外,還應該在塊本身之外進行處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.