如何在Python中查看类的unicode(utf8)urepr_uu?

2024-10-03 04:24:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要什么

在本例中,我希望看到不使用print的unicode字符串:

In [1]: a = u's·A/m'

In [2]: type(a)
Out[2]: str

In [3]: a
Out[3]: 's\xc2\xb7A/m'

In [4]: print a
s·A/m

如何强制字符串__repr__不显示s\xc2\xb7A/m,而是s·A/m?在

用例是什么?

我有一个类,它表示一个与其单位相关的数字,例如:

^{pr2}$

当我在IPython中工作时,我想快速查看instance的内容:

>>> a = MyNumber('23.43', ampere=1, second=1, meter=-1)
>>> a
23.43 s·A/m

相反,我得到了一个例外:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 11: ordinal not in range(128)

如果我试图手动查看我的__repr__的内容,我会得到以下信息:

>>>a.__repr__()
23.43 s\xc2\xb7A/m 

Tags: 字符串in内容typeunicode单位out用例
3条回答

返回Unicode字符串,而不是从__repr__返回字节字符串。在

def __repr__(self):
    return unicode(self) + self.units.decode('utf-8')

如果self.units已经是Unicode字符串:

^{pr2}$

您的问题可能来自IPython配置。检查编码:

>>> import sys
>>> sys.getdefaultencoding()
'ascii'

如果使用如上所述的ASCII,则可能会遇到unicode字符串的一些问题。在

所以试试这个:

^{pr2}$

它应该能起作用。。。在

这就是所谓的XY问题。你的第一个问题完全不相干。在

相反,你应该

  • 或者将您的self.units修改为正确的格式(如果我没弄错,您使用的是python3?您应该在标签中宣布您的Python主要版本…)
  • 或者把它转换成

    class MyNumber(float):
        def __repr__(self):
            return str(self) + " " + str(self.units)
    

这个答案是我猜测self.units可能不是str,而是unicode对象。默认情况下,它的隐式转换可能失败,ascii编解码器用于解码。在

您应该确保不要混淆原始字符串和unicode字符串。在

如果str(self.units)不起作用,您可能需要将其替换为self.units.decode("utf8")。在

要弄清楚这个过程:

在提示符处输入a将以某种方式显示repr(a)的结果。在

repr(a)调用a.__repr__()检查其类型(必须是str并显示它。在

我不清楚为什么a或{}失败,而a.__repr__()起作用,这就是为什么我一直询问异常的回溯。。。在

相关问题 更多 >