python的UnboundLocalError

本文详细解读了Python编程中常见的UnboundLocalError错误产生的场景及原因,并提供了解决方法,帮助开发者避免此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在线上看到python的memcache客户端报错:

File "/data1/dist/app/trunk/duitang/memcache.py", line 929, in _recv_value
    return val
UnboundLocalError: local variable 'val' referenced before assignment

 

UnboundLocalError: local variable 'val' referenced before assignment

这个错误很感兴趣,google了一下。

 

产生这个错误的场景有:

def test(flag):
	if flag:
		val = 1
	else:
		print 'fuck'
	return val

test(0)

前面这段code还好理解,下面这段code也会报这个Error就让人觉得有点坑爹了:

>>> counter = 0
>>> def increment():
...     counter+=1
... 
>>> increment()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in increment
UnboundLocalError: local variable 'counter' referenced before assignment

 

错误原因在于python没有变量的声明 , 所以它通过一个简单的规则找出变量的范围 :如果有一个函数内部的变量赋值 ,该变量被认为是本地的。 因此行 

counter+=1

会隐式的把counter设为increment()的本地变量,当对counter做自增操作时,解释器才发现它并没有分配,这时就抛出UnboundLocalError 要解决这个问题可以通过global 关键字

 

参考:http://stackoverflow.com/questions/9264763/unboundlocalerror-in-python?rq=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值