1

我已经阅读了有关此错误的几篇文章,但我仍然不明白我做错了什么。

我把它放在一个最小的例子中:假设我有一个 Doc.py,以及包含 Tool1.py 和 Tool2.py 的包 Tools。

文档.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__()

工具1.py:

def REPORT(path):
    print("Tool1 "+path)

工具2.py:

def REPORT(path):
    print("Tool2 "+path)

如果我运行它,我总是会遇到这个错误:

TOOL_REPORT 中的文件“Doc.py”,第 15 行

Tool1.REPORT(路径)

NameError:未定义全局名称“Tool1”

我会很感激任何提示出了什么问题!

4

2 回答 2

3

在明确导入某处之前,您的Tool1Tool2子模块是不可见的。

您可以在Tools/__init__.py包文件中导入它们:

import Tool1, Tool2

此时它们可以从Tools.

另一种选择是从您自己的代码中导入模块:

import Tools.Tool1, Tools.Tool2
from Tools import *

只有当显式导入时,子模块才会被设置为包的属性。

于 2013-07-05T12:24:11.020 回答
0

当其中存在文件时,Python 会将任何文件夹视为一个模块__init__.py。否则它将只是 python 的另一个文件夹,而不是可以从中导入内容的模块。因此,只需在您的 Tool 文件夹中添加init .py 文件(因此它将成为 Python 术语中的模块),然后您可以将该模块导入其他 Python 脚本中。

还有一件事可以更好地练习,而不是使用

from Tools import *

始终提供您要导入的库的文件名,在您的情况下,您应该像这样使用它

from Tools import Tool1, Tool2

这将增强其他人和您的代码可读性。

于 2016-12-29T06:03:56.510 回答