【问题标题】:Referencing before assignment error赋值错误前的引用
【发布时间】:2018-03-14 00:40:31
【问题描述】:

我收到错误“在赋值之前引用了局部变量 'Xold'”。我不明白为什么我会收到错误,因为我在尝试使用它之前已经分配了有问题的变量。

def calculator (newX,newY):
    global count
    if  count==0:
        Xold = newX
        Yold = newY
        count+=1
        print(Xold,Yold) #prints 97.9 which is correct. 
    else:
        Xdistance = newX - Xold
        Ydistance = newY - Yold
        print(Xdistance,Ydistance)
        parser()

顺便提一下,count 在代码开头设置为 0。

【问题讨论】:

  • 是的,如果您输入 else 块,则不会定义 Xold 和 Yold`。所以它会在任何时候出现这个错误count != 0
  • 提示:函数中的所有变量都会在函数返回后立即被丢弃(或者当执行“落到函数的末尾”时)。
  • 问题是XoldYold是本地的,不是全局的,所以即使count是那么,一旦>0,错误就会上升
  • @Kevin 所以我需要将变量存储在别处?我只想将解析器的初始值存储在 Xold 和 Yold 中。

标签: python python-3.x


【解决方案1】:

你的else 守卫首先执行,所以Xold 没有被分配。即使 Xold 出现在上面的一行中,它也在一个没有被执行的块中。

执行的步骤是:

calculator(x, y)
  if count == 0 # False
  else:
  Xdistance = newX - Xold # Xold is not defined yet

您需要在 if 子句之外使用合理的变量来定义它。

如果你想变得聪明,你可以这样做

count = 0

def calculator (newX,newY):
    global count
    if  count==0:
        calculator.Xold = newX
        calculator.Yold = newY
    count+=1
    print(calculator.Xold,calculator.Yold) #prints 97.9 which is correct. 
else:
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多