在Python导入之后,对定义的调用会生成NameError



我是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导入。

最新更新