一、背景
在Python模块倒入的方法中,存在两个问题,一个是循环导入,一个是模块导入的覆盖。在使用过程中遇到了模块导入覆盖的情况,出现了以下的错误:
TypeError: 'module' object is not callable
这个错误是由于不规范的导入覆盖+模块引用冲突引起的,在Python中,所有后出现的模块会覆盖前面的导入模块,并且有些模块的使用是需要指明导入的模块路径,例如tqdm的使用。因此在文件one.py中导入了模块x,而在two.py中同时导入了one和x,但是由于one中的模块导入不规范,使得其覆盖了two中导入的模块,因此引发了上述的错误。
二、错误例子示范
给定两个文件one.py和two.py,其中two将作为模块别one导入。
one.py的文件如下,以tqdm模块为例子。
from tqdm import tqdm
from two import *
x = [i for i in range(10)]
for i in tqdm(x):
print(i)
two.py的文件如下:
import tqdm
这个时候one.py就会出现下面的bug
Traceback (most recent call last):
File "one.py", line 5, in <module>
for i in tqdm(x):
TypeError: 'module' object is not callable
三、解决办法
知道了问题,解决方法也有两个。
第一在two文件中,规范导入
from tqdm import tqdm
第二在one文件中,将tqdm导入滞后
from two import *
from tqdm import tqdm
这里遇到的问题和其他的博主不一样。关键的问题在于理解模块导入的过程和方法,可以排查出问题。