在线上看到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