UnboundLocalError:嵌套區塊中的過早變數賦值
使用巢狀函數作用域時,如提供的程式碼中所示,Python可能會遇到錯誤訊息「UnboundLocalError:賦值之前引用了局部變數『c』。」當在初始化之前引用嵌套區塊中分配的變數時,會發生此錯誤。
在範例程式碼中:
a, b, c = (1, 2, 3) def test(): print(a) print(b) c += 1 # UnboundLocalError here
程式碼嘗試列印變數 a、b 和c 在函數 test() 中。雖然 a 和 b 是全域變數並且可以直接訪問,但 c 存在於函數的局部範圍內。結果,賦值 c = 1 創建了一個局部變數 c,它覆蓋了同名的全域變數。
程式碼執行時,Python 初始化 a 和 b 並繼續呼叫 test()。在 test() 中,它成功列印 a 和 b,但在給局部變數 c 賦值之前嘗試列印它,從而導致錯誤。
要解決此問題,必須明確聲明變數在分配任何值之前使用 global 關鍵字作為函數內的全域。這通知 Python 使用全域變數而不是建立本地變數。修正後的程式碼為:
a, b, c = (1, 2, 3) def test(): global c # Declare 'c' as global print(a) print(b) c += 1
或者,在 Python 3 中,可以使用 nonlocal 關鍵字,它指的是具有同名變數的最近的封閉函數作用域。這允許修改在外部函數中聲明的非全域變數。使用非本地更新的程式碼將是:
a, b, c = (1, 2, 3) def test(): nonlocal c print(a) print(b) c += 1
以上是為什麼 Python 在巢狀函數中拋出'UnboundLocalError”,以及如何解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!