print obj
呼び出すと呼び出しobj.__str__()
が発生し、文字列が返されてコンソールに出力されることを理解しました。今、私はUnicodeで、ASCII以外の文字を印刷できないという問題に直面しています。私は典型的な「範囲外のASCII」のものを手に入れました。
実験中、以下が機能しました:
print obj.__str__()
print obj.__repr__()
両方の関数がまったく同じように動作します(__str__()
を返すだけself.__repr__()
です)。うまくいかなかったもの:
print obj
この問題は、ASCII範囲外の文字を使用した場合にのみ発生しました。最終的な解決策は、次のようにすることでした__str__()
。
return self.__repr__().encode(sys.stdout.encoding)
今ではすべての部分で機能します。私の質問は今です:違いはどこにありますか?なぜ今それが機能するのですか?何も機能しなかった場合、なぜこれが機能するのかがわかります。しかし、なぜ下部ではなく上部のみが機能するのでしょうか。
OSはWindows7x64で、デフォルトのWindowsコマンドプロンプトがあります。また、エンコーディングはであると報告されていますcp850
。これは、Pythonを理解するためのより一般的な質問です。私の問題はすでに解決されていますが、100%満足しているわけではありません。これは主に、今すぐ呼び出すstr(obj)
と、希望どおりにエンコードされていない文字列が生成されるためです。
# -*- coding: utf-8 -*-
class Sample(object):
def __init__(self):
self.name = u"üé"
def __repr__(self):
return self.name
def __str__(self):
return self.name
obj = Sample()
print obj.__str__(), obj.__repr__(), obj
最後を削除しobj
、それが動作します。それを維持し、それはでクラッシュします
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)