組み込み関数__repr__
と__str__
は基本定義に重要な違いがあるようです。__str __()は舞台裏でdecode()メソッドを呼び出しますか?
>>> t2 = u'\u0131\u015f\u0131k'
>>> print t2
ışık
>>> t2
Out[0]: u'\u0131\u015f\u0131k'
t2.decode
t2
は、Unicode文字列であるため、エラーが発生します。問題なく
>>> t2.__str__()
------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordin
al not in range(128)
しかし__repr__
作品:
>>> t2.__repr__()
Out[0]: "u'\\u0131\\u015f\\u0131k'"
はなぜ__str__
は適切__repr__
仕事に対し、エラーが発生するのでしょうか?decode()
関数が呼び出されているかのように
>>> enc = 'utf-8'
>>> t2.decode(enc)
------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
File "C:\java\python\Python25\Lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordin
al not in range(128)
__str__
でエラーが発生しますか
この小さな違いは、私が取り組んでいる1つのdjangoアプリケーションにバグを引き起こすようです。