gpt4 book ai didi

python - 导入函数带来错误: name not defined

转载 作者:行者123 更新时间:2023-12-01 03:28:07 25 4
gpt4 key购买 nike

我问了很多人,但找不到任何有效的问题。我的代码看起来相同,但我正在尝试导入游戏的标题。虽然该函数在源文件中有效,但导入到另一个文件后,找不到该函数。以下是 cmd 中的文件和产生的错误:

游戏.py:

from Events import *
from Character import *

Opening()

角色.py:

from Events import *
from Game import *

事件.py:

from Game import *
from Character import *

def Opening():
print " _____ _ _____ _____ _ _ "
print "/ ___| | | / ___| / __ \ | | (_) "
print "\ `--. _ _| |__ ______\ `--. _ __ __ _ ___ ___ | / \/ __ _ ___ ___ _ __ | |__ ___ _ __ _ __ _ "
print " `--. \ | | | '_ \______|`--. \ '_ \ / _` |/ __/ _ \ | | / _` |/ __/ _ \| '_ \| '_ \ / _ \| '__| |/ _` |"
print "/\__/ / |_| | |_) | /\__/ / |_) | (_| | (_| __/ | \__/\ (_| | (_| (_) | |_) | | | | (_) | | | | (_| |"
print "\____/ \__,_|_.__/ \____/| .__/ \__,_|\___\___| \____/\__,_|\___\___/| .__/|_| |_|\___/|_| |_|\__,_|"
print " | | | | "
print " |_| |_| "

但是在cmd中运行Game.py文件后,出现错误:

Traceback (most recent call last):
File "Game.py", line 2, in <module>
from Events import *
File "/tmp/so/Events.py", line 2, in <module>
from Game import *
File "/tmp/so/Game.py", line 8, in <module>
Opening()
NameError: name 'Opening' is not defined

最佳答案

您的问题是循环导入和使用“from import *”的组合。

最好的解决方案是组织您的代码,这样您就不需要循环导入。什么是循环导入?您有游戏导入事件,然后导入游戏。当您查看错误时正在执行的行时,您可以在堆栈跟踪中看到这一点(我编辑了您的问题以包含它)。

问题的第二部分是 Python 的导入机制和“from import *”的工作方式。第一次,Game.py 正在执行。遇到的第一行是 from Events import *。所以 python 查找 sys.modules 并没有找到模块 Events。所以它开始加载Events.py。加载Events.py将按顺序执行语句。第一条语句是 from Game import *。由于 Game 不在 sys.modules 中,因此将加载它。所以第一个语句是 from Events import *。如果这现在看起来很令人困惑,那么是的:没有循环导入。这次在 sys.modules 中找到了 Events但是,它没有完全初始化,因为它仍在加载。因此,Game 会在 Events 中找到此时定义的所有名称,但实际上并没有。然后它继续尝试在当前作用域中查找名为 Opening 的对象,但找不到它。可以说,Python 一遇到循环导入就应该崩溃,并告诉你不要这样做,但它没有。如果您格外小心,它可能会起作用,但无论如何这都是一个坏主意。

关于python - 导入函数带来错误: name not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41230600/

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