簡體   English   中英

為什么異常參數沒有被python中的finally塊捕獲

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM