代码之家  ›  专栏  ›  技术社区  ›  Amr El-Hezzawy

error TypeError:“str”对象不可调用python

  •  1
  • Amr El-Hezzawy  · 技术社区  · 7 年前

    我的代码中有这个错误,我不知道如何修复

    import nltk
    from nltk.util import ngrams
    
    
    def word_grams(words, min=1, max=4):
       s = []
       for n in range(min, max):
            for ngram in ngrams(words, n):
                s.append(' '.join(str(i) for i in ngram))
        return s
    
    print word_grams('one two three four'.split(' '))
    

    erorr输入

    s.append(' '.join(str(i) for i in ngram))
    

    TypeError:“str”对象不可调用

    2 回复  |  直到 7 年前
        1
  •  4
  •   Pierre-Luc Perron    7 年前

    您发布的代码是正确的,可以同时使用python 2.7和3.6(对于3.6,必须在print语句周围加括号)。然而,代码原样有一个3个空格的缩进,应该固定为4个空格。

    下面是如何再现您的错误

    s = []
    str = 'overload str with string'
    # The str below is a string and not function, hence the error
    s.append(' '.join(str(x) for x in ['a', 'b', 'c']))
    print(s)
    
    Traceback (most recent call last):
      File "python", line 4, in <module>
      File "python", line 4, in <genexpr>
    TypeError: 'str' object is not callable
    

    一定有你重新定义的地方 str内置 操作员作为 str值 就像上面的例子。

    这里是同一个问题的一个简单例子

    a = 'foo'
    a()
    Traceback (most recent call last):
      File "python", line 2, in <module>
    TypeError: 'str' object is not callable
    
        2
  •  1
  •   OneCricketeer    7 年前

    我通过运行您的代码获得输出。

    O/P:
    ['one', 'two', 'three', 'four', 'one two', 'two three', 'three four', 'one two three', 'two three four']
    

    我想错误不会发生。这是你想要的吗?