在函数中使用其他函数变量时遇UnboundLocalError问题求助
解决UnboundLocalError:即使使用global仍报错的问题
嘿,我猜你大概率是在函数里先引用了变量,再声明global,这就是问题所在!让我给你拆解一下:
先看你可能写出的错误代码
a = 1 def update_a(): print(a) # 这里先引用了a global a # 后声明global a = 2 update_a()
运行这段代码就会触发你遇到的错误:UnboundLocalError: local variable 'a' referenced before assignment
为什么会报错?
Python的作用域规则是这样的:当函数内部存在对变量的赋值操作(比如这里的a = 2),Python会默认把这个变量标记为局部变量——不管你后面有没有加global声明。
在上面的错误代码里,print(a)先执行时,Python已经认定a是局部变量,但此时还没给它赋值,自然就报错了。global声明必须在函数内第一次使用这个变量之前,才能让Python知道你要操作的是全局变量。
正确的写法
把global声明放在函数内所有对a的引用之前:
a = 1 def update_a(): global a # 先声明要使用全局变量a print(a) # 现在引用的是全局变量 a = 2 update_a() print(a) # 输出2,符合你的预期
额外提醒
如果是在嵌套函数里修改外层函数的变量(不是全局变量),那你需要用nonlocal关键字而不是global,别搞混了哦!
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

