已定义全局变量a仍报UnboundLocalError,为何未引用全局变量?
为什么这段Python代码没有引用全局变量a反而报错?
原代码:
a = 10 def b(x): if(x == True): a = 2 return a print(b(False))
报错信息翻译:
回溯(最近的调用最后): 文件 "<string>", 第8行, 在 <module> 中 文件 "<string>", 第6行, 在 b 函数中 UnboundLocalError: 局部变量 'a' 在赋值前被引用
原因解析
Python的变量作用域规则是:只要函数内部存在对某个变量的赋值操作,不管这个操作会不会被实际执行(比如在条件分支里),Python在编译函数时就会把这个变量标记为局部变量,不会去引用同名的全局变量。
在你的代码里,函数b的if分支里有a = 2这个赋值操作,所以Python直接认定a是b的局部变量。当调用b(False)时,if分支不会执行,局部的a根本没被赋值,但后面又执行return a,这就触发了“局部变量未赋值就引用”的错误。
解决办法
有两种常见处理方式:
- 如果需要在函数里修改全局变量
a,要在函数开头加global a声明,明确告诉Python这个a是全局变量:a = 10 def b(x): global a if(x == True): a = 2 return a print(b(False)) # 输出10 - 如果只是想读取全局变量
a,不要在函数里对a做赋值操作,把分支里的变量名改成别的(比如a_local = 2),或者去掉赋值逻辑。
内容的提问来源于stack exchange,提问作者hari19
相关产品推荐
相关产品推荐

