持续收到TypeError:“列表”对象不可调用

时间:2019-02-23 16:42:39

标签: python list compiler-errors python-3.6

我不确定我的错误在哪里,但这是我从index = plottest(doc)得到错误的代码:

for doc in plottest:

    for word in wordsunique:

        if word in doc:
            word = str(word)
            index = plottest(doc)
            positions = list(np.where(np.array(index) == word)[0])
            idfs = tfidf(word,doc,plottest)

            try:
                worddic[word].append([index, positions, idfs])
            except:
                worddic[word] = []
                worddic[word].append([index, positions, idfs])

1 个答案:

答案 0 :(得分:0)

正如@Robin Zigmond在评论中所说,您正试图使用​​(...)语法调用列表,就像调用函数一样。以下:

>>> def f(x): return 2*x
... 
>>> f(2)
4

不同于:

>>> L=[1,2,3]
>>> L(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable

后者不能工作,因为[1,2,3]是不可调用的。 The Python documentation列举可调用类型:

  • 用户定义的函数
  • 实例方法
  • 发电机功能
  • 协程函数
  • 异步生成器功能
  • 内置函数
  • 内置方法
  • 课程
  • 类实例:可以通过在类中定义__call__()方法来使任意类的实例可调用。

列表(例如list实例)都不是列表,因为list类没有__call__() method

>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

在您的示例中,第一行指出plottest是可迭代的。错误显示它是一个列表。然后,您尝试使用index = plottest(doc)进行调用。我的猜测是您想获取docplottest的索引。要在Python中实现此目标,您可以编写:

for index, doc in enumerate(plottest):
    ...

希望有帮助!