在 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中文網其他相關文章!