一、背景

在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

这里遇到的问题和其他的博主不一样。关键的问题在于理解模块导入的过程和方法,可以排查出问题。

四、参考

CSDN

posted on 2024-01-06 19:44  蔚蓝色の天空  阅读(23)  评论(0编辑  收藏  举报