模块内部模块错误,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
我创建了一个名为 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