首頁 後端開發 Python教學 為什麼在 Python 3.x 中處理異常時會出現 NameError 或 UnboundLocalError?

為什麼在 Python 3.x 中處理異常時會出現 NameError 或 UnboundLocalError?

Oct 29, 2024 am 08:50 AM

Why Do I Get NameError or UnboundLocalError When Handling Exceptions in Python 3.x?

了解命名異常的NameError 和UnboundLocalError 問題

在Python 2.x 中,下面的片段片段正確地列印了命名的片段值異常,exc,在except 區塊之外:

<code class="python">exc = None
try:
    raise Exception
except Exception as exc:
    pass
print(exc)</code>
登入後複製

但是,在Python 3.x 中,嘗試相同的程式碼會產生NameError(或函數上下文中的UnboundLocalError)。要解決這個問題,必須掌握 Python 更新行為背後的基本原則。

Python 3.x 異常範圍與清理

Python 3.x 中的except 語句明確限制綁定異常的範圍,以防止循環引用和過早的垃圾收集。當使用 as 語法分配異常時,它會在 except 子句的末尾被清除。這需要將異常分配給 except 區塊之外的不同名稱,以便進一步存取。

簡單地重新指派 exc = exc 是不夠的,因為 except 子句不會建立新的作用域。相反,它會從當前異常分配中刪除異常分配中指定的名稱。

歷史上下文和Python 2.x 行為

在Python 2.x 中,異常確實不擁有對回溯的引用,從而消除了像Python 3.x中那樣嚴格的清理的需要。由於沒有循環引用,異常可以綁定到 except 區塊之外的命名變量,而不會造成問題。

處理異常的建議

在Python 3 中有效處理異常.x,建議遵循以下準則:

  1. 將異常綁定到except 子句之外的新變數。
  2. 如有必要,明確清除回溯引用以防止循環引用並方便

以下程式碼舉例說明了這些建議:

<code class="python">try:
    raise Exception("foo")
except Exception as e:
    exc = e  # Bind to a new variable
    exc.__traceback__ = None  # Explicitly clear traceback</code>
登入後複製

透過遵循這些實踐,您可以自信地處理和存取Python 3.x 中的異常,避免陷阱由NameError 和UnboundLocalError 構成。

以上是為什麼在 Python 3.x 中處理異常時會出現 NameError 或 UnboundLocalError?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

我如何使用美麗的湯來解析HTML? 我如何使用美麗的湯來解析HTML? Mar 10, 2025 pm 06:54 PM

我如何使用美麗的湯來解析HTML?

python中的圖像過濾 python中的圖像過濾 Mar 03, 2025 am 09:44 AM

python中的圖像過濾

如何使用Python查找文本文件的ZIPF分佈 如何使用Python查找文本文件的ZIPF分佈 Mar 05, 2025 am 09:58 AM

如何使用Python查找文本文件的ZIPF分佈

如何使用Python使用PDF文檔 如何使用Python使用PDF文檔 Mar 02, 2025 am 09:54 AM

如何使用Python使用PDF文檔

如何在django應用程序中使用redis緩存 如何在django應用程序中使用redis緩存 Mar 02, 2025 am 10:10 AM

如何在django應用程序中使用redis緩存

如何使用TensorFlow或Pytorch進行深度學習? 如何使用TensorFlow或Pytorch進行深度學習? Mar 10, 2025 pm 06:52 PM

如何使用TensorFlow或Pytorch進行深度學習?

python對象的序列化和避難所化:第1部分 python對象的序列化和避難所化:第1部分 Mar 08, 2025 am 09:39 AM

python對象的序列化和避難所化:第1部分

如何在Python中實現自己的數據結構 如何在Python中實現自己的數據結構 Mar 03, 2025 am 09:28 AM

如何在Python中實現自己的數據結構

See all articles