我已经阅读过一堆范围的帖子,但我没有找到答案。我使用python 2.7.6。 这是代码:
def play(A, B):
state = START_STATE
#player = None
while state[1] < goal and state[2] < goal:
if state[0]:
player = B
else:
player = A
state = resolve_state(state, player(state))
return player
这会引发UnboundLocalError。在总是返回None变量时取消注释第3行效果,但我确信播放器变量始终是A或B.使播放器成为全局变量可以解决问题。谁能解释这种行为?从我读过的内容和if语句不创建它们的作用域,所以函数应该是while / if块中声明的变量的作用域。
错误说:“UnboundLocalError:在赋值之前引用的局部变量'player'
我确信循环执行是因为START_STATE =(0,0,0,0)+我用打印双重检查+使播放器全局解决问题并且它不会影响循环入口条件
@jonathan - &gt;它保留了旧版本
答案 0 :(得分:1)
你的代码是而不是通过循环 - 这是一个简化的代码来演示它:
# noloop.py
def loop(A, B, x):
#player = None
while x:
if True:
player = B
else:
player = A
x = False
return player
以及通话和结果:
>>> import noloop
>>> noloop.loop("A", "B", True)
'B'
>>> noloop.loop("A", "B", False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "noloop.py", line 12, in loop
return player
UnboundLocalError: local variable 'player' referenced before assignment
>>>
所以你的断言是错的,点清楚。请注意,您的代码依赖于两个全局变量START_STATE
和goal
,这使得调试更加困难。首先重写你的函数以摆脱所有全局变量(提示:传递START_STATE
和goal
作为参数),然后添加一些调试代码(如循环之前,之内和之后的一些打印语句),以及你可能会发现自己出了什么问题。