模块内部模块错误,python

时间:2016-03-06 21:36:16

标签: python python-module

我创建了一个名为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

2 个答案:

答案 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