关于这个错误,我已经读过几篇文章,但我仍然不明白我做错了什么。
我把它放在一个最小的例子中:假设我有一个Doc.py,以及包含Tool1.py和Tool2.py的包工具。
Doc.py:
from Tools import *
import sys
def __main__():
TOOL_REPORT("Tool1","Test")
def TOOL_REPORT(tool, path):
if(tool == 'Tool1'):
Tool1.REPORT(path)
elif(tool == 'Tool2'):
Tool2.REPORT(path)
else:
sys.stderr.write("This tool is not yet included in Doc. Please check TOOLS for more information.")
if __name__=="__main__": __main__()Tool1.py:
def REPORT(path):
print("Tool1 "+path)Tool2.py:
def REPORT(path):
print("Tool2 "+path)如果运行此操作,则始终会出现以下错误:
Doc.py文件,第15行,在TOOL_REPORT中 Tool1.REPORT(路径) NameError:未定义全局名称“Tool1”
我很想知道到底出了什么问题!
发布于 2013-07-05 12:24:11
在显式导入某个地方之前,Tool1和Tool2子模块是不可见的。
您可以在Tools/__init__.py包文件中导入它们:
import Tool1, Tool2此时,它们可以从Tools导入。
另一种选择是从您自己的代码中导入模块:
import Tools.Tool1, Tools.Tool2
from Tools import *只有在显式导入时,子模块才被设置为包的属性。
发布于 2016-12-29 06:03:56
当任何文件夹中存在__init__.py文件时,Python都会将其视为一个模块。否则,它将只是python的另一个文件夹,而不是它可以从其中导入东西的模块。因此,只需在工具文件夹中添加init.py文件(因此它将成为pythonic术语中的模块),然后您就可以在其他python脚本中导入该模块。
还有一件事是为了更好的实践而不是用
from Tools import *始终提供库的文件名,特别是要导入的文件名,在您的情况下,您应该像这样使用它
from Tools import Tool1, Tool2这将增强其他人和您的代码可读性。
https://stackoverflow.com/questions/17488804
复制相似问题