Python 3.2.1:赋值前引用的变量,以前有效
我在这里搜索过类似的问题,但找不到确切的答案。我一直收到一个“…分配前引用”错误 我试图将一个函数返回的两个图形对象放入另一个函数的两个变量中 在早期版本中,我基本上拥有完全相同的代码,并且工作得很好 我有一段代码:Python 3.2.1:赋值前引用的变量,以前有效,python,graphics,return,Python,Graphics,Return,我在这里搜索过类似的问题,但找不到确切的答案。我一直收到一个“…分配前引用”错误 我试图将一个函数返回的两个图形对象放入另一个函数的两个变量中 在早期版本中,我基本上拥有完全相同的代码,并且工作得很好 我有一段代码: if moveE: moved_ctr, nT = MoveCharacter(ctr, spaceSize, borderSet, "east") if moveW: moved_ctr, nT = MoveCharacter(ctr, spaceSize, bo
if moveE:
moved_ctr, nT = MoveCharacter(ctr, spaceSize, borderSet, "east")
if moveW:
moved_ctr, nT = MoveCharacter(ctr, spaceSize, borderSet, "west")
moved_ctr.draw(board)
这就是MoveCharacter()的外观:
def MoveCharacter(character, spSz, bdSet, direction):
x1 = character.getCenter().getX()
x2 = bdSet
y1 = character.getCenter().getY()
y2 = bdSet
notifyText = Text(Point(100, 100), "")
character.undraw()
distance = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
if direction == "east":
if distance < spSz:
character.move(spSz, 0)
else:
notifyText.setText("You cannot move right from where you currently are.")
if direction == "west":
if distance > spSz:
character.move(-1 * spSz, 0)
else:
notifyText.setText("You cannot move left from where you currently are.")
return character, notifyText
def MoveCharacter(character,spSz,bdSet,direction):
x1=character.getCenter().getX()
x2=bdSet
y1=character.getCenter().getY()
y2=bdSet
notifyText=文本(点(100100),“”)
character.undraw()
距离=数学sqrt((x2-x1)**2+(y2-y1)**2)
如果方向==“东”:
如果距离spSz:
字符移动(-1*spSz,0)
其他:
notifyText.setText(“您不能从当前位置向左移动。”)
返回字符,notifyText
我不断地发现错误:
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
Grid()
File "<pyshell#24>", line 70, in Grid
moved_ctr.draw(board)
UnboundLocalError: local variable 'moved_ctr' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
网格()
文件“”,第70行,网格中
移动的中央绘图(板)
UnboundLocalError:赋值前引用了局部变量“moved\u ctr”
如果移动,在之前会发生什么:
最有可能的是,
moveE
和moveW
是错误的。如果moveE:,在之前会发生什么
很可能,moveE
和moveW
是错误的。这:moveE=rectIntersect(gE,点击)moveW=rectIntersect(gW,点击)
是在之前的,如果moveE:
。同样,该代码与以前保持不变,当我单击相应的按钮时,它返回True
。rectIntersect()
只是讲师提供的一个函数,用于检查鼠标单击是否在给定的矩形内。虽然现在我在单击相应的按钮时测试了这些值,但这可能是部分问题所在。出于调试目的,可能需要打印出moveE
和moveW
。看起来你的问题是这两个都是False
,所以maved\u ctr
没有被分配到。@Dougal:当我打印moveE
和moveW
时,不管我是否点击其中一个,它们都会说False
。我正在试图弄清楚为什么它现在不起作用,因为之前,我让一个返回True
,另一个返回False
,这意味着它得到了所有正确的结果,并且它将根据单击的内容采取适当的措施。当你“单击”什么?问一个关于您正在使用的特定图形API以及从UI获得的值的新问题。此问题:moveE=rectIntersect(gE,单击)moveW=rectIntersect(gW,单击)
是在moveE:
之前的问题。同样,该代码与以前保持不变,当我单击相应的按钮时,它返回True
。rectIntersect()
只是讲师提供的一个函数,用于检查鼠标单击是否在给定的矩形内。虽然现在我在单击相应的按钮时测试了这些值,但这可能是部分问题所在。出于调试目的,可能需要打印出moveE
和moveW
。看起来你的问题是这两个都是False
,所以maved\u ctr
没有被分配到。@Dougal:当我打印moveE
和moveW
时,不管我是否点击其中一个,它们都会说False
。我正在试图弄清楚为什么它现在不起作用,因为之前,我让一个返回True
,另一个返回False
,这意味着它得到了所有正确的结果,并且它将根据单击的内容采取适当的措施。当你“单击”什么?问一个关于您正在使用的特定图形API的新问题,以及您从UI获得的值。在早期版本中是什么?(面对模棱两可的问题,拒绝猜测的诱惑)。在早期版本中是什么?(面对模棱两可的情况,拒绝猜测的诱惑)。