首页 > 解决方案 > 如何修复名称未在 Python 中定义

问题描述

我正在运行一个这样的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+

标签: pythonpython-3.xpython-import

解决方案


好的做法是使用小写的文件名。

看起来您正在创建一个 Python 项目project/。任何目录都需要__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 *

推荐阅读