[英]NameError: global name is not defined
我知道有很多类似的问题,但它们并没有帮助我理解我的问题。 我也有3个模块:
第一个是model
:
from datetime import datetime
from elixir import *
from run_test import create_db
from sqlalchemy.schema import UniqueConstraint
class ValueTest(Test):
value = Field(Integer)
def __init__(self, name, value):
'''
Constructor
'''
self.name = name;
self.value = value
如果我从名为run_test
的第二个模块运行测试方法,则没有任何问题
from model import *
def main():
test();
def test():
test = ValueTest("test",2)
if __name__ == "__main__":
main()
但是当我尝试这样的事情时,我得到了众所周知的错误NameError: global name 'ValueTest' is not defined
import run_test
def main():
run_test.test()
if __name__ == '__main__':
main()
当你导入一个模块时,你不会导入它已经导入的名字; 您只导入它自己定义的名称。 您仍然需要在最后一个脚本中执行from model import ValueTest
。
如果 from foo import *
将foo
导入到其自己的 scope 中的每个名称导入,则单个import something
也可能会导入os
或sys
中的每个符号。这将是一场噩梦。
事实上,这不是真的。 从模块导入的符号仅是由该模块中设置的__all__
列表定义的符号。 (如果不存在,则确实导入了所有不以_
开头的符号。)
感谢 Ethan 的更正。
问题是你有循环导入发生。 run_test
正在导入model
,而后者又正在导入run_test
。 使用循环导入时会发生奇怪的事情。 如果可以,将常用函数(在您的示例中为create_db
)放入另一个模块,然后model
可以从那里导入它,而不是从run_test
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.