为什么当我加载模块太多次时Python会抛出错误,如何修复?

2024-04-16 15:04:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我制作了一个程序,通过导入不同的python脚本来管理程序的不同模式。问题是,如果从script1.py转到script2.py,然后从script2.py返回到script1.py,然后与第一个相同,则会抛出一个错误:“找不到名为script2.py的模块。script2不是包”。你知道吗

当然是谷歌搜索的。你知道吗

#We are at script1
import script2.py

#We are at script2
import script1.py

#We are at script1
import script2.py

ModuleNotFoundError: No module named 'script2.py'; 'script' is not a package

如果有人能帮我看完剧本而不出差错,我将不胜感激。你知道吗


Tags: 模块nopyimport程序脚本错误模式
1条回答
网友
1楼 · 发布于 2024-04-16 15:04:10

我为自己创建了两个脚本XY在一个相互引用的包P中。你知道吗

X.py公司

#from P.Y import Y
from P import Y

def usefulX3():
    return 3

def usefulX2():
    return 2

def X1():
    return usefulX2() + usefulX3()

def X():
    #return Y()
    return Y.Y()

if __name__ == '__main__':
    print(X())

是的

#from P.X import X1
from P import X

def Y():
    #return X1()
    return X.X1()

按原样,运行脚本X.py产生输出:5。你知道吗

这是因为像:from P import Y这样的导入只会让编译器检查文件Y.py是否存在,而不要求查看其内部。你知道吗

但是,如果在两个文件中交换注释掉的行: Y.py中的ie:

from P.X import X1
#from Pimport X

def Y():
    return X1()
    #return X.X1()

再次运行X.py,我得到一个回溯:

Traceback (most recent call last):
  File "C:/Expt/P/X.py", line 1, in <module>
    from P.Y import Y
  File "C:/Expt/P\Y.py", line 1, in <module>
    from P.X import X1
  File "C:/Expt/P\X.py", line 1, in <module>
    from P.Y import Y
ImportError: cannot import name 'Y'

从中可以看出,编译器只从每个文件中获取第一行代码,因此被卡住了。你知道吗

所以您可以看到执行import modulefrom package import module不会受到递归导入的影响。你知道吗

解决这些问题的真正办法是使进口只朝一个方向流动。你知道吗

在下面的重写示例中,依赖关系仅从X流到Y,也就是说X依赖于Y中的某个内容,而不是相反:

X.py公司

from P.Y import Y

def usefulX3():
    return 3

def usefulX2():
    return 2

def X1():
    return usefulX2() + usefulX3()

def X():
    return Y(X1)

if __name__ == '__main__':
    print(X())

还有Y.py

def Y(remoteX1):
    return remoteX1()

有两点需要注意:

  1. X仍然从Y导入,但将函数名注入Y()
  2. Y不导入任何内容,但仍然能够调用自身外部的函数。你知道吗

相关问题 更多 >