我被告知要调用print obj
将调用obj.__str__()
,这将返回一个字符串以打印到控制台。现在我遇到了一个Unicode问题,我无法打印任何非ascii字符。我得到了典型的“ascii超出范围”的东西。打印obj和打印obj .__ str __之间的Python区别__()[至少使用Unicode?]
虽然尝试以下工作:
print obj.__str__()
print obj.__repr__()
随着做的正是这两个功能相同(__str__()
刚刚返回self.__repr__()
)。什么没有工作:
print obj
问题只发生在使用字符超出ascii范围。最终的解决方案是为以下在__str__()
:
return self.__repr__().encode(sys.stdout.encoding)
现在,它适用于所有的部件。我现在的问题是:区别在哪里?它为什么现在工作?如果没有任何工作,我会得到,为什么现在可以工但为什么只有最上面的部分是工作的,而不是底部。
操作系统是Windows 7 x64,具有默认的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)
什么Python版本是你在跑? –
用您打印的字符串样本显示obj类的最小示例。 –
你是否在寻找'obj .__ unicode __()'? –