模块内部模块错误,python

Module inside module error, python

我创建了一个名为 StringPlay.py 的文件,并在文件 ScanTheFile.py 上调用它,然后在另一个名为 Controller.py 的文件中调用了 ScanTheFile.py 中的函数。但它引发了一个错误,即 StringPlay.py 不存在

在ScanTheFile.py

import StringPlay as SP

def TNews(FileFirstLine):
    FileLine = SP.RemoveSpases(FileFirstLine)
    if True:
       Statement
    return(FileLine)

在Controller.py

from HelpFiles import StringPlay as SP
from HelpFiles import ScanTheFile as StF

File1 = open("TextFiles\File1.txt")
print(Stf.TNews(File1.readline()))

执行此操作时,它会引发一条消息,指出第 1 行的 ScanTheFile.py 中:

File "C:\Users\***\My Documents\Python\HelpFiles\ScanTheFile.py", line 1, in <module>
import StringPlay as SP
ImportError: No module named 'StringPlay'

但是在执行ScanTheFile.py的时候就没有问题了

这是我的目录结构

My Documents\Python 
My Documents\Python\Controller.py 
My Documents\Python\HelpFiles 
My Documents\Python\HelpFiles\ScanTheFile.py 
My Documents\Python\HelpFiles\StringPlay.py 
My Documents\Python\TextFiles 
My Documents\Python\TextFiles\File1.txt 
My Documents\Python\TextFiles\File2.txt

你遇到这个问题是因为当你 运行 Controller.py 你在 运行 中说 C:\...\My Documents 当你打电话给 from HelpFiles import ScanTheFile as StF 你告诉python 在 C:\...\My Documents\HelpFiles 中查找名为 ScanTheFile.py.

的文件

它找到这个文件并运行在C:\...\My Documents所以当它到达ScanTheFile.py中的行时:

import StringPlay as SP

它在 C:\...\My Documents 中查找 StringPlay.py,据我所知,它存在于 C:\...\My Documents\HelpFiles

由于您已经在 Controller.py 中明确导入 StringPlay.py 我想说的是只需将 ScanTheFile.py 更改为仅在文件为 [=40= 时导入 StringPlay.py ] 直接,而不是导入:

ScanTheFile.py

if __name__ == "__main__":
    import StringPlay as SP

def TNews(FileFirstLine):
    FileLine = SP.RemoveSpases(FileFirstLine)
    if True:
       Statement
    return(FileLine)

您正在从 HelpFiles 导入,这基本上是文件夹而不是文件。简单来说,在 python 中,如果你想从一个文件夹中导入一些东西,它必须是一个包,除非你明确地将文件夹的路径添加到 python 路径中。

因此,要解决您遇到的问题,请将名称为 __init__.py 的空文件放入该文件夹中,从而将 HelpFiles 打包成一个包,该文件应如下所示

.
└── My Document
    └── Python
        ├── Controller.py
        ├── HelpFiles
        │   ├── __init__.py
        │   ├── ScanTheFile.py
        │   └── StringPlay.py
        └── TextFiles
            ├── File1.txt
            └── File2.txt