Python(3.3):UnboundLocalError:赋值前引用的局部变量

Python(3.3):UnboundLocalError:赋值前引用的局部变量,python,python-3.x,Python,Python 3.x,每当我开始我的游戏,比如说,我输入1,4作为网格引用,它将以 “UnboundLocalError:赋值前引用的局部变量'of'” 我怎样才能解决这个问题 代码(为简洁起见编辑为): 在函数xtorn中,使用了的变量,该变量在该范围内未声明/已知,因此会导致错误 如果查看堆栈跟踪: Traceback (most recent call last): File "D:/Projekte/Python/snakes35/blabla.py", line 141, in <module&g

每当我开始我的游戏,比如说,我输入1,4作为网格引用,它将以

“UnboundLocalError:赋值前引用的局部变量'of'”

我怎样才能解决这个问题

代码(为简洁起见编辑为):


在函数
xtorn
中,使用了
的变量
,该变量在该范围内未声明/已知,因此会导致错误

如果查看堆栈跟踪:

Traceback (most recent call last):
  File "D:/Projekte/Python/snakes35/blabla.py", line 141, in <module>
    ocheck(1)
  File "D:/Projekte/Python/snakes35/blabla.py", line 138, in ocheck
    xturn(1)
  File "D:/Projekte/Python/snakes35/blabla.py", line 33, in xturn
    if goo in "1,4" and of not in "o":
UnboundLocalError: local variable 'of' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“D:/Projekte/Python/snakes35/blabla.py”,第141行,在
奥切克(1)
文件“D:/Projekte/Python/snakes35/blabla.py”,第138行,在ocheck中
Xtrn(1)
文件“D:/Projekte/Python/snakes35/blabla.py”,第33行,在xturn中
如果goo在“1,4”中,of不在“o”中:
UnboundLocalError:赋值前引用的局部变量“of”

您可以通过查看文件中出现错误的行来了解这一点。

在函数
xtorn
中,您使用了
的变量
,该变量在该范围内未声明/已知,因此出现了错误

如果查看堆栈跟踪:

Traceback (most recent call last):
  File "D:/Projekte/Python/snakes35/blabla.py", line 141, in <module>
    ocheck(1)
  File "D:/Projekte/Python/snakes35/blabla.py", line 138, in ocheck
    xturn(1)
  File "D:/Projekte/Python/snakes35/blabla.py", line 33, in xturn
    if goo in "1,4" and of not in "o":
UnboundLocalError: local variable 'of' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“D:/Projekte/Python/snakes35/blabla.py”,第141行,在
奥切克(1)
文件“D:/Projekte/Python/snakes35/blabla.py”,第138行,在ocheck中
Xtrn(1)
文件“D:/Projekte/Python/snakes35/blabla.py”,第33行,在xturn中
如果goo在“1,4”中,of不在“o”中:
UnboundLocalError:赋值前引用的局部变量“of”

您可以通过查看文件中出现错误的行来找出原因。

的变量(以及所有其他两个字母的变量)在函数xturn中不可用

我强烈建议您使用增量编程:编写几行代码,让它们正常工作,然后扩展您的程序。这使您可以很容易地将错误归零。每当我攻击一种新的编程风格时,我发现这非常有用。看来您对这里使用的一些技术还不熟悉

例如,您在
中使用而不是=进行比较。作为一项一般原则,这是行不通的

在主程序之前声明函数。按照你写这篇文章的方式,你每次通过循环都在重新定义你的函数。将函数移到顶部也可以解决许多变量作用域问题

学习使用布尔值和变量。您的循环应该如下所示:

while True:
    cont = True
    while cont:

通过将变量作为参数传递给函数,可以使变量可用。我可以看出,您是新手,因为您给了这个函数一个从未使用过的参数x

总的来说,您不应该有9个变量:您应该有一个列表,然后只传递整个列表作为游戏板的当前状态。如果你将正方形编号为0-8,你可以很容易地在这方面与电路板一起工作


要解决眼前的问题,您可以将这一行添加到每个例程中:

global of,tf,rf,ov,tv,rv,os,ts,rs
这将使变量可用。我知道@Thomas已经指出了这一点


尽管如此,我还是鼓励您更干净地设计它。使用全局变量通常是糟糕的设计。另外,注意这个程序需要复制多少代码?这应该容易得多。

的变量(以及所有其他两个字母的变量)在函数xturn中不可用

我强烈建议您使用增量编程:编写几行代码,让它们正常工作,然后扩展您的程序。这使您可以很容易地将错误归零。每当我攻击一种新的编程风格时,我发现这非常有用。看来您对这里使用的一些技术还不熟悉

例如,您在
中使用而不是=进行比较。作为一项一般原则,这是行不通的

在主程序之前声明函数。按照你写这篇文章的方式,你每次通过循环都在重新定义你的函数。将函数移到顶部也可以解决许多变量作用域问题

学习使用布尔值和变量。您的循环应该如下所示:

while True:
    cont = True
    while cont:

通过将变量作为参数传递给函数,可以使变量可用。我可以看出,您是新手,因为您给了这个函数一个从未使用过的参数x

总的来说,您不应该有9个变量:您应该有一个列表,然后只传递整个列表作为游戏板的当前状态。如果你将正方形编号为0-8,你可以很容易地在这方面与电路板一起工作


要解决眼前的问题,您可以将这一行添加到每个例程中:

global of,tf,rf,ov,tv,rv,os,ts,rs
这将使变量可用。我知道@Thomas已经指出了这一点


尽管如此,我还是鼓励您更干净地设计它。使用全局变量通常是糟糕的设计。另外,注意这个程序需要复制多少代码?这应该会容易得多。

即使变量仅在外部范围内定义,访问函数中的变量基本上也可以工作。但是在
xtorn
函数中,有一行指定给
of
。在错误发生之前是否执行了这一行并不重要;它仅仅存在于函数中的任何地方,就会导致Python解释器将其视为局部变量。因此,当在
if
子句中访问它时,Python尝试访问
的局部变量
,现在重要的是,直到那时这样一个局部变量还没有被赋值。

访问一个函数内的变量基本上是可行的,即使该变量只在外部范围内定义。但是在您的
xturn
函数中