次のステートメントで型エラーが発生する理由を理解できません
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 = 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
1つの解決策は、変数名をstr_
または何かに変更することです。より良い解決策は、この種のハンガリー語の命名システムを避けることです。これは Java ではありません。Python のポリモーフィズムを最大限に利用し、代わりによりわかりやすい名前を使用してください。
別の可能性として、オブジェクトに適切な__str__
メソッドがないか、まったくない可能性があります。
Python がメソッドをチェックするstr
方法は次のとおりです。
__str__
クラスのメソッド__str__
親クラスのメソッド__repr__
クラスのメソッド__repr__
親クラスのメソッド<module>.<classname> instance at <address>
where <module>
is self.__class__.__module__
、<classname>
is self.__class__.__name__
、<address>
isの形式の文字列id(self)
__str__
新しいメソッドを使用するよりもさらに優れ__unicode__
ています (Python 3.x では、それらは__bytes__
とです。その後、スタブ メソッドとして__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