Python 中的異常範圍和分配綁定異常
在Python 中,了解except 區塊結束後命名異常的範圍至關重要。當比較 Python 2.x 和 3.x 行為時,這一點變得很明顯。
Python 3.x 行為:NameError 和UnboundLocalError
在Python 3.x 中,嘗試存取該區塊之外的except 區塊中命名的異常會導致NameError (如果在函數外部存取)或UnboundLocalError(如果在函數內部存取)。
更改原因
此更改是由於 Python 3.x 決定在 except 子句中明確限制命名異常的範圍。這是為了防止循環引用並避免需要明確清理回溯。
解決方法
要存取 except 區塊之外的異常,需要將其重新綁定到一個新名字。例如:
<code class="python">exc = None try: raise Exception except Exception as exc: exc = exc # Rebinding to a new name</code>
明確回溯清除
如果需要,可以在重新綁定異常後明確清除回溯:
<code class="python">exc = None try: raise Exception("foo") except Exception as e: exc = e exc.__traceback__ = None</code>
與Python 2.x 對比
在Python 2.x 中,異常不包含對其回溯的引用,因此不需要此範圍限制。因此,將異常分配給 except 區塊之後的變數不會產生任何負面後果。
以上是Python 2.x 和 3.x 中命名異常的範圍有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!