我创建了一个名为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
答案 0 :(得分:0)
您遇到了这个问题,因为当您运行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
中我可以收集到的内容。
由于您已经在StringPlay.py
中明确导入了Controller.py
,我只想将ScanTheFile.py
更改为仅在导入文件时导入StringPlay.py
,而不是导入:
ScanTheFile.py
if __name__ == "__main__":
import StringPlay as SP
def TNews(FileFirstLine):
FileLine = SP.RemoveSpases(FileFirstLine)
if True:
Statement
return(FileLine)
答案 1 :(得分:0)
您正在从HelpFiles
导入,这基本上是文件夹而不是文件。简单地说,在python中,如果你想从文件夹导入一些东西,它必须是一个包,除非你明确地将文件夹的路径添加到python路径。
所以,要解决这个问题,你可以通过在该文件夹中放置一个名为HelpFiles
的空文件来使__init__.py
成为一个包
.
└── My Document
└── Python
├── Controller.py
├── HelpFiles
│ ├── __init__.py
│ ├── ScanTheFile.py
│ └── StringPlay.py
└── TextFiles
├── File1.txt
└── File2.txt