gpt4 book ai didi

python - 导入 Python 后,调用定义会生成 NameError

转载 作者:行者123 更新时间:2023-11-28 22:41:07 25 4
gpt4 key购买 nike

我是 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

在你的脚本中。当然,还有其他两种方式,有些是直接导入,有些是 fromed。

关于python - 导入 Python 后,调用定义会生成 NameError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32889386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com