我是 python 新手,我正在尝试执行以下操作:
我有一个名为 app
的文件夹,该文件夹有两个文件:main.py 和 init.py
main.py
def generate_report(x1, x2):
print "Generating report..."
print x1
print x2
if __name__ == "__main__":
print "Running: main.py..."
generate_reports(1, 2)
print "Done!"
else:
print "Imported: main.py..."
__init__.py
import main
如果我这样做,现在在我的控制台中:
import app
我得到:
Imported: main.py...
那么如果我尝试这样做:
generate_report(1, 2)
我收到以下错误:
NameError: name 'generate_report' is not defined
最佳答案
Python 中的模块命名空间有两种不同的方法。其中一种方法是 import blah
,然后使用 blah.spam
访问 blah 的元素。在另一个例子中,您可以说 from blah import spam
(或 *
),然后直接通过名称访问 blah 的元素。
问题是,您必须在每个级别上做出决定:如果您有一个包,您需要做出两个这样的决定:您的脚本如何导入包(在您的情况下是app
),以及应用程序的 __init__.py
如何导入 main
(顺便说一句,这是一个可怕的模块名称;P)。
因此,一种解决方案是编写
from app import main
在你的__init__.py
中,并且
from app import generate_report
在你的脚本中,另一个是写
app.main.generate_report
在你的脚本中。当然,还有其他两种方式,有些是直接导入,有些是 from
ed。
关于python - Python 导入后,调用定义会生成 NameError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32889386/