[英]"UnboundLocalError: local variable referenced before assignment" After using global variables
[英]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.