4

だから私は辞書とその値を引き出したいクラスメソッドを持っています:

 def __repr__ (self): 
        for row in zip(*([ky]+map(str,val) for ky,val in (self.slovar.items()))):

           print"\t".join (row)

このような場合、目的の出力が得られます。

>>> test
n   n1  n2
1   a   2.3
2   b   2.1
3   d   2.5

Traceback (most recent call last):
  File "<pyshell#521>", line 1, in <module>
    test
TypeError: __repr__ returned non-string (type NoneType)

トレースバック エラーも発生します。

出力する代わりに値を返すと、次のようになります。

>>> test
n   n1  n2

デフォルトの「システム」メソッドではないカスタムメソッドを作成すると、正常に機能します...(そして、デフォルトにする必要があります)

4

3 に答える 3

11

あなたの__repr__メソッドはprint情報を出力するために使用していますが、returnステートメントがないため、事実上None、文字列ではない を返しています。


あなたができることは次のとおりです。

def __repr__ (self): 
    parts = []
    for row in zip(*([ky]+map(str,val) for ky,val in (self.slovar.items()))):
       parts.append("\t".join (row))
    return '\n'.join(parts)

モジュールも参照してくださいpprint

于 2012-12-05T14:36:26.133 に答える
2

__repr__(self)メソッドは文字列を返す必要があります。

def __repr__ (self): 
 return "\n".join("\t".join (row) for row in zip(*([ky]+map(str,val) for ky,val in (self.slovar.items()))))
于 2012-12-05T14:37:04.560 に答える
1

あなたはこのようにそれを行うことができます:

def __repr__ (self): 
    rows = zip(*([ky]+map(str,val) for ky,val in (self.slovar.items())))
    return "\n".join("\t".join(row) for row in rows)

このようにして、読みやすくコンパクトなままです。

于 2012-12-05T14:44:05.310 に答える