例子:
import user
class Thing(object):
def doSomething(self):
u = user.User(1)
print u.name
>> UnboundLocalError: local variable 'user' referenced before assignment
但这行得通:
class Thing(object):
def doSomething(self):
import user
u = user.User(1)
print u.name
感谢您的帮助!
编辑:
但这行得通:
import user as anothername
class Thing(object):
def doSomething(self):
u = anothername.User(1)
print u.name
请您参考如下方法:
您发布的代码缺少一些东西,因为它工作正常,如图所示。
我猜你的真实代码看起来更像这样:
import user
class Thing(object):
def doSomething(self):
u = user.User(1)
print u.name
# ...
user = something
问题是,通过分配给局部名称 user,你说 user 是该函数整个主体的局部变量 -- 甚至是作业前的代码。这意味着名称 user 确实不在该函数中引用您的模块,它引用局部变量。在为局部变量赋值之前尝试引用它会导致您看到的错误。
使用本地导入是可行的,因为导入的部分作用是赋值。即:import user 确保已导入“user”模块,并将该模块对象分配给名称 user。
简单的解决方法是将局部变量的名称更改为不会影响导入的名称。
