繁体   English   中英

如何在没有全局变量的情况下解决“ UnboundLocalError:赋值之前引用了本地变量'foo'”错误?

[英]How can I get around “UnboundLocalError: local variable 'foo' referenced before assignment” errors without global variables?

这是我的代码的简化版本:

class foo:
    def __init__(self, thing):
        self.thing = thing

def bar():
    foo = foo('test')

bar()

这是它产生的:

Traceback (most recent call last):
  File "filepath", line 8, in <module>
    bar()
  File "filepath", line 6, in bar
    foo = foo('test')
UnboundLocalError: local variable 'foo' referenced before assignment

我对此有两个问题。

首先, 我该如何解决 经过一番谷歌搜索后,我发现在foo = foo('test')行之前添加global foo可以解决问题。 但是,普遍的共识似乎是全局变量是要避免的坏事情,那么有没有办法避免使用全局变量呢?

其次, 为什么这实际上发生了? 我了解函数只能访问在该函数内部创建的变量(当然还有全局变量)。 但是我并不是要访问在函数外部定义的变量,而是在创建一个新变量。 从逻辑上讲,为什么禁止在函数内部创建新对象(除非您先将其声明为全局对象)?

解析器一看到foo = ... ,便将foo标记为局部变量。 一旦发生这种情况,您尝试调用foo('test')尝试将失败,因为局部变量foo尚未引用任何东西 ,更不用说可调用对象了。

您将不得不为创建的对象选择一个不同的名称。

Python中的变量始终在一个范围内。

你试图给一个局部变量foo ,而读一个全局变量foo

当您分配未使用global关键字声明的变量时,将假定它是局部变量。 因此,当您编写foo = foo() Python假定foo是本地的,然后您得到错误,即您在写入foo之前先读取了foo。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM