我无法理解为什么我会收到以下语句的类型错误
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
正如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')
有关更多详细信息,请参阅此问题。
正如 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