Skip to content

问题解决local variable 'xxx' referenced before assignment

标签:global 变量 作用域

问题 在写代码是遇到了一个奇怪的问题,local variable 'siteName' referenced before assignment, 特此记录一下,这里其实是变量作用域的问题,平时开发中大家也会经常用到。 复现问题 代码如下: 1 2 3 4 5 6 7 8 siteName = 'pythontab' def localVar(flag):     if flag:         siteName = 'pythontab.com'     else:         print('ok')     return siteName localVar(0) 结果: 1 2 3 4 5 6 Traceback (most recent call last):   File "localVar.py", line 10, in      localVar(0)   File "localVar.py", line 8, in localVar     return siteName UnboundLocalError: local variable 'siteName' referenced before assignment 上面这句话的意思是:本地变量siteName引用前没定义。 解决问题 问题出在哪呢?我猜测可能是在给函数内siteName赋值时出错了, 虽然这里并没有走这个if得分支,下面通过代码验证一下 1 2 3 4 5 6 7 8 siteName = 'pythontab' def localVar(flag):     if flag:         pythontabName = siteName     else:         print('ok')     return siteName localVar(0) 这时候得结果是: 1   到这里我们大致清楚了,原来全局变量是可以在函数内读取,但是不能被重新赋值得, 如果想重新赋值,那么需要通过关键字global 1 2 3 4 5 6 7 8 9 siteName = 'pythontab' def localVar(flag):     global siteName     if flag:         siteName = 'pythontab.com'     else:         print('ok')     return siteName localVar(0) 这个时候就OK了 总结 在于python没有变量的声明 , 所以它通过一个简单的规则找出变量的范围 :如果有一个函数内部的变量赋值 ,该变量被认为是本地的,所以如果有修改变量的值就会变成局部变量。

部分信息收集于网络,若有侵权请联系我们.