python - 如何修复名称未在 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+
解决方案
好的做法是使用小写的文件名。
看起来您正在创建一个 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 *
推荐阅读
- c - 如何计算连续赢/输并在连续输赢被打破后重置?
- c# - 保存在 word VSTO 中的按钮
- react-native - React Native Viro AR 应用程序在添加包时崩溃
- sql - Varchar 标量函数,返回在 SQL Server 2019 中截断
- android - 尝试导入 OpenGL C++ 项目时应用程序崩溃
- macos - 在 macOS 下增加 SwiftUI 中的模糊半径时,是否可以去除四个边缘周围的黑色效果?
- javascript - 展开 Firestore 搜索
- mysql - 使用 docker 打包一个包含固定 MySQL 数据的 web 应用程序
- css - 在css中垂直绘制线条
- react-native - 最简单的 React-native setTimeout 不等待