You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套函数中的UnboundLocalError问题咨询及原理求证

Python nonlocal关键字实验问题解答

实验代码:

def a():
    b = 5
    print(f"b (1) = {b}")
    def c():
        #nonlocal b
        print(f"b (2) = {b}")
        b = 3
    c()

a()

注释掉nonlocal后出现的错误:

Traceback (most recent call last):
  File "<string>", line 10, in <module>
  File "<string>", line 8, in a
  File "<string>", line 6, in c
UnboundLocalError: cannot access local variable 'b' where it is not associated with a value

你的理解完全正确。

Python解析函数时会先扫描整个函数体,只要函数内部存在变量赋值语句(比如示例里的b = 3),就会把这个变量标记为当前函数的局部变量,不再去外层作用域查找。所以在c()函数执行print(f"b (2) = {b}")时,Python认定b是c的局部变量,但此时它还没被赋值,就会抛出UnboundLocalError。

你可以查看Python官方文档中关于变量作用域的章节,里面详细说明了LEGB(局部、闭包嵌套、全局、内置)的作用域查找规则,以及nonlocal、global关键字的具体用法。


内容的提问来源于stack exchange,提问作者Michael Schäfer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 15:52:08