7

我无法理解为什么我会收到以下语句的类型错误

log.debug('vec : %s blasted : %s\n' %(str(vec), str(bitBlasted)))

type(vec)  is unicode
bitBlasted is a list

我收到以下错误

TypeError: 'str' object is not callable
4

2 回答 2

7

遮蔽内置

正如Collin所说,您可能正在隐藏内置str

>>> str = some_variable_or_string #this is wrong
>>> str(123.0) #Or this will happen
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

一种解决方案是将变量名称更改为str_或其他内容。更好的解决方案是避免使用这种匈牙利命名系统——这不是 Java,而是充分利用 Python 的多态性并使用更具描述性的名称。

没有定义合适的方法

另一种可能性是对象可能没有适当的__str__方法,甚至根本没有方法。

Python 检查该str方法的方式是:-

  • 类的__str__方法
  • __str__其父类的方法
  • 类的__repr__方法
  • __repr__其父类的方法
  • 和最后的后备:一个形式为<module>.<classname> instance at <address>where <module>is self.__class__.__module__, <classname>isself.__class__.__name__<address>is的字符串id(self)

甚至比__str__使用新__unicode__方法更好(在 Python 3.x 中,它们是__bytes__and __str__。然后您可以将其实现__str__为存根方法:

class foo:
    ...
    def __str__(self):
        return unicode(self).encode('utf-8')

有关更多详细信息,请参阅此问题

于 2012-07-12T20:50:25.113 回答
5

正如 mouad 所说,您str在文件中较高的位置使用了该名称。这会影响现有的内置str,并导致错误。例如:

>>> mynum = 123
>>> print str(mynum)
123
>>> str = 'abc'
>>> print str(mynum)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable
于 2012-07-12T20:31:25.437 回答