tqdm:'module'对象不可调用

78

我这样导入tqdm:

import tqdm

我在我的Python3代码中使用tqdm来显示进度,但是遇到了以下错误:

Traceback (most recent call last):
  File "process.py", line 15, in <module>
    for dir in tqdm(os.listdir(path), desc = 'dirs'):
TypeError: 'module' object is not callable

以下是代码:

path = '../dialogs'
dirs = os.listdir(path)

for dir in tqdm(dirs, desc = 'dirs'):
    print(dir)

可能是重复的问题:TypeError: 'str' object is not callable (Python) - Morgan Thrapp
开发人员似乎应该为此制作自定义错误,因为这是如此常见的错误。 - eric
4个回答

161

这个错误提示你正在尝试调用模块,但是这样做是不行的。

要调用模块,你只需要执行以下操作:

tqdm.tqdm(dirs, desc='dirs') 

解决您的问题。或者简单地更改您的导入为

from tqdm import tqdm

但是,重要的是要审查使用的文档,并确保正确使用。


1
让我笑了,哈哈 - Ehsan Fathi

18

你只使用了 tqdm,实际上应该使用 tqdm.tqdm, 因此请尝试更改。

from tqdm import tqdm

for dir in tqdm(dirs, desc = 'dirs'):
print(dir)

哇!问题真的解决了。我总是做一些愚蠢的导入,然后事后后悔。我应该早点检查的。 - SAch

9

tqdm是一个包含函数的模块(如matplotlib或pandas)。其中一个函数被称为tqdm。因此,您需要调用tqdm.tqdm来调用模块中的函数,而不是调用模块本身。


最有用的答案是解释如何钓鱼,而不是仅仅给一条鱼。 - mins

1
from tqdm import tqdm
with open(<your data>, mode='r', encoding='utf-8') as f:
    for _, line in enumerate(tqdm(f)):
       pass

5
请添加一些背景信息,可能是为什么应该改变代码的解释,以帮助将来遇到类似问题的人。谢谢! - creyD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接