【问题标题】:Python string object not callablePython字符串对象不可调用
【发布时间】:2012-07-12 16:35:18
【问题描述】:

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

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

【问题讨论】:

  • 不要将你的字符串变量命名为str,你正在隐藏内置的str
  • 您的一个参数没有实现 str
  • @Pooya 不。会有不同的错误

标签: python string


【解决方案1】:

正如 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

【讨论】:

  • 我在我的函数中找不到任何对 str 的赋值。这是此错误的唯一原因吗>
  • 我将代码从 str(vec) 更改为 vec.__str__()... 我仍然得到相同的错误
【解决方案2】:

遮蔽内置

无论是as Collin said,你都可能会屏蔽内置的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 的 polymorphism 并使用更具描述性的名称。

没有定义合适的方法

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

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

  • 类的__str__方法
  • 其父类的__str__方法
  • 类的__repr__方法
  • 其父类的__repr__方法
  • 和最后的回退:&lt;module&gt;.&lt;classname&gt; instance at &lt;address&gt; 形式的字符串,其中&lt;module&gt;self.__class__.__module__&lt;classname&gt;self.__class__.__name__&lt;address&gt;id(self)

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

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

更多详情请见this question

【讨论】:

  • 在花了很多时间浏览我的代码之后。我确实找到了一个地方,我将 str 调用到一个没有正确定义 str 的对象...谢谢
  • @nitin 那么您是否对 str 进行了 shadown,或者您是否在某些不支持它的对象上调用了 str()?请告诉我们对象是什么。
  • 我在一个由 zip() 函数创建的对象上调用 str()。这不支持内置的 __str__() 方法。
  • @nitin 不要zip 函数只返回一个可迭代对象(很可能是一个列表或元组)?他们的str 方法应该没有任何问题。
  • @nitin 奇怪。恕我直言,应该回退到__repr__()object 的方法之一......
猜你喜欢
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 2020-10-03
相关资源
最近更新 更多