所以我有一个类方法,我想用它来绘制字典及其值:
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
如果我制作一个自定义方法而不是默认的“系统”方法,它可以正常工作......(我需要它是默认的)
答案 0 :(得分:7)
您的__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)
您可能还想查看the pprint
module。
答案 1 :(得分:1)
您的__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()))))
答案 2 :(得分: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)
这样它仍然可读且紧凑。