首頁 >後端開發 >Python教學 >為什麼在 Python 中會出現 UnboundLocalError?

為什麼在 Python 中會出現 UnboundLocalError?

Linda Hamilton
Linda Hamilton原創
2024-12-05 22:20:17528瀏覽

Why Do I Get an UnboundLocalError in Python?

UnboundLocalError:了解 Python 中的未綁定變數

在 Python 中,當局部變數在賦值之前被引用時,會發生 UnboundLocalError。與其他程式語言不同,Python 不需要顯式變數宣告。相反,變數在賦值時會綁定到值。

觸發UnboundLocalError 的一種方法是存取未賦值的變數:

>>> foobar
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'foobar' is not defined

另一種方法是當賦值運算無法執行時,例如就像在條件區塊中一樣:

def foo():
    if False:
        spam = 'eggs'
    print(spam)

>>> foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in foo
UnboundLocalError: local variable 'spam' referenced before assignment

在Python中,名稱透過各種操作綁定到值:賦值、函數參數、導入語句、異常處理程序和上下文管理器。當名稱綁定在函數作用域中時,它就成為局部變數。要存取函數內的全域變量,必須使用全域或非局部語句(在 Python 3 中)。

例如,以下函數嘗試存取全域變數foo 但失敗,因為它綁定在函數內範圍:

foo = None
def bar():
    if False:
        foo = 'spam'
    print(foo)

>>> bar()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in bar
UnboundLocalError: local variable 'foo' referenced before assignment

但是,使用全域foo 解決了這個問題:

foo = None
def bar():
    global foo
    if False:
        foo = 'spam'
    print(foo)

>>> bar()
None

理解變數的概念綁定對於避免Python 中的UnboundLocalErrors 至關重要。

以上是為什麼在 Python 中會出現 UnboundLocalError?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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