我正在尝试运行一个聊天机器人,它可以在程序运行时创建新命令。为此,我将所有命令保存在第二个python脚本中,并使用主脚本编辑命令.py文件,而聊天机器人仍在运行。你知道吗
问题…
我可以让两个脚本使用import main和import main访问彼此main.function名称()调用函数。但是,当我尝试调用命令.py从主.py,然后使用调用的函数调用中的另一个函数主.py我听到一个错误说
AttributeError: module 'main' has no attribute 'exampleFunction'
例如以下代码
测试.py
import TESTING2
def runme(inp):
print(inp)
startOver()
print("begin")
TESTING2.startOver()
测试2.py
import TESTING
def startOver():
userInput = input("Enter text at your own risk... ")
TESTING.runme(userInput)
产生以下结果:
begin
Traceback (most recent call last):
File "C:\Users\harry\Desktop\TESTING.py", line 1, in <module>
import TESTING2
File "C:\Users\harry\Desktop\TESTING2.py", line 1, in <module>
import TESTING
File "C:\Users\harry\Desktop\TESTING.py", line 8, in <module>
TESTING2.startOver()
AttributeError: module 'TESTING2' has no attribute 'startOver'
预期的结果将是一个连续的输入循环,然后像一个无缝的脚本一样打印文本。你知道吗
这可能吗?如果是这样的话,我该怎么做?或者有更好的方法来实现同样的目标吗?你知道吗
非常感谢。你知道吗
所以,我会给你一些可以解决你问题的东西。实际上,您所做的是构造一个循环依赖:
commands.py
由main.py
编写,main.py
依赖于commands.py
的函数。几乎可以肯定的是,有一种方法可以解决您的问题,而不引入这种循环依赖,但我需要知道更多,以便提出一些建议。你知道吗如果确定要这样做,可以使用
importlib.reload
,它告诉python重新加载已经导入的模块。换句话说,如果您在调用原始的import
之后向commands.py
添加了一个新函数,那么调用reload
将使此函数可用。你知道吗作为一个小示例,请尝试设置
commands.py
和main.py
脚本,如下所示:以及:
运行
main.py
,当您到达input
部分时,打开commands.py
,并将其更改为如下所示:现在在运行
main.py
脚本中点击“回车”。您应该看到打印到终端的func2
结果。你知道吗不过,也要注意
reload
并不一定会按照您预期的方式行事,而且可能会导致一些奇怪的、可以解释的事情发生。有关更多信息,请参阅以下帖子:https://stackoverflow.com/a/438845/141789相关问题 更多 >
编程相关推荐