Python中未定义如何修复名称

时间:2019-07-05 10:27:30

标签: python python-3.x python-import

我正在运行一个像这样的python项目:

project
  Test.py
  COMMON.py
  SYSTEM.py
  PTEST1
    Hello.py

当运行代码“ Test.py”时,它将显示NameError,我不确定为什么吗?

但是,如果我在Test.py和PTEST1 / Hello.py中将“ from SYSTEM import *”替换为“ from COMMON import *”,它将按预期工作。

#Test.py is like this:

from SYSTEM import *
myvalue.Hello.printf()

# COMMON.py is like this:

myvalue = lambda: None
from PTEST1.Hello import Hello
myvalue.Hello = Hello

# SYSTEM.py is like this:

from COMMON import *
#PTEST1/Hello.py
from SYSTEM import *

class Hello():   
    @staticmethod
    def printf():
        print("Hello1")
        print(vars(myvalue))

我希望通过不更改导入代码而不会出现“ NameError”。顺便说一句,我的python是3.6 +

1 个答案:

答案 0 :(得分:0)

优良作法是将文件名小写。

似乎您正在project/下创建一个Python项目。任何目录都需要在每个目录中都有一个文件__init__.py,以便在Python中被发现。

然后,您需要按模块的全名(而不是相对命名)来引用模块。

因此目录结构应为:

project/
  __init__.py
  test.py
  common.py
  system.py
  ptest1/
    __init__.py
    hello.py

每次引用文件时,都应提供完整路径。

# import everything from hello.py
from project.ptest1.hello import *

# import everything from common.py
from project.common import *

# import everything from system.py
from project.system import *