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)

但也是一个 Traceback 错误。

如果我返回值而不是打印出来,我只会得到这个:

>>> 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 回答