包看起来像这样:
我运行from SmartDownload import DownloadFile
。
我运行from HTTPQuery import Is_ServerSupportHTTPRange
我运行from SmartDownload import DownloadFile
似乎我陷入了循环,因为这是错误:
Traceback (most recent call last):
File "C:\Scripts\mp3grabber\main.py", line 13, in <module>
import HTTPQuery
File "C:\Scripts\mp3grabber\HTTPQuery.py", line 6, in <module>
from SmartDownload import DownloadFile
File "C:\Scripts\mp3grabber\SmartDownload.py", line 3, in <module>
from HTTPQuery import Is_ServerSupportHTTPRange
ImportError: cannot import name Is_ServerSupportHTTPRange
但我必须将第二个文件的函数导入第三个文件,反之亦然。
我该怎么办?
答案 0 :(得分:3)
如您所知,HTTPQuery
和SmartDownload
之间存在循环依赖关系。简单的解决方法是将导入移动到需要它的函数中,例如
# SmartDownload.py
def download(url):
from HTTPQuery import Is_ServerSupportHTTPRange
...
更好的解决方案可能是重新组织您的模块。如果没有合理的方法来删除HTTPQuery
对SmartDownload
的依赖,反之亦然,请考虑将它们合并到一个模块中。
答案 1 :(得分:3)
您最好的选择是重新组织依赖项,以免出现此循环导入问题。除此之外,您可以简单地将行from SmartDownload import DownloadFile
移动到HTTPQuery.py文件的底部以打破循环。
关于循环导入here有一些讨论。