Python(3.3):UnboundLocalError:在assignmen之前引用的局部变量

2024-04-25 11:47:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

"UnboundLocalError: local variable 'of' referenced before assignment"

我怎么能解决这个问题?在

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

import time
while 1==1:
    cont=1
    while cont==1:

        of="-"
        tf="-"
        rf="-"
        ov="-"
        tv="-"
        rv="-"
        os="-"
        ts="-"
        rs="-"
        go=1
...

Tags: of代码import网格游戏编辑timelocal
3条回答

在函数xturn中,您使用了变量of,该变量在该范围内没有声明/已知,因此会出现错误。在

如果查看堆栈跟踪:

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

您可以通过查看文件中错误所在的行来解决这个问题。在

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

我强烈建议您使用增量编程:编写几行代码,使其正常工作,然后放大您的程序。这使您可以很容易地将注意力集中在错误上。每当我攻击一种新的编程风格时,我都觉得这很有用。看来你对这里使用的一些技术还不熟悉。在

例如,您在中使用而不是==进行比较。这不是一个普遍的原则。在

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

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

while True:
    cont = True
    while cont:

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

总的来说,你不应该有9个变量:你应该有一个列表,然后把整个列表作为游戏板的当前状态来传递。如果你把方格编号为0-8,你可以很容易地在这方面与董事会合作。在


要解决当前的问题,您可以在每个例程中添加以下行:

^{pr2}$

这将使变量可用。我知道托马斯已经指出了这一点。在

不过,我还是鼓励你把这个设计得更干净。使用全局变量通常是糟糕的设计。另外,请注意要为这个程序复制多少代码?它应该容易得多。在

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

相关问题 更多 >