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

转自:https://www.weidianyuedu.com/

问题
在写代码是遇到了一个奇怪的问题,local variable ‘siteName’ referenced before assignment, 特此记录一下,这里其实是变量作用域的问题,平时开发中大家也会经常用到。

复现问题
代码如下:

siteName = ‘pythontab’
def localVar(flag):
if flag:
siteName = ‘pythontab.com’
else:
print(‘ok’)
return siteName
localVar(0)
结果:

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得分支,下面通过代码验证一下

siteName = ‘pythontab’
def localVar(flag):
if flag:
pythontabName = siteName
else:
print(‘ok’)
return siteName
localVar(0)

这时候得结果是:

到这里我们大致清楚了,原来全局变量是可以在函数内读取,但是不能被重新赋值得, 如果想重新赋值,那么需要通过关键字global

siteName = ‘pythontab’
def localVar(flag):
global siteName
if flag:
siteName = ‘pythontab.com’
else:
print(‘ok’)
return siteName
localVar(0)

这个时候就OK了

总结
在于python没有变量的声明 , 所以它通过一个简单的规则找出变量的范围 :如果有一个函数内部的变量赋值 ,该变量被认为是本地的,所以如果有修改变量的值就会变成局部变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值