我想要什么
在本例中,我希望看到不使用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
返回Unicode字符串,而不是从
__repr__
返回字节字符串。在如果
^{pr2}$self.units
已经是Unicode字符串:您的问题可能来自IPython配置。检查编码:
如果使用如上所述的ASCII,则可能会遇到unicode字符串的一些问题。在
所以试试这个:
^{pr2}$它应该能起作用。。。在
这就是所谓的XY问题。你的第一个问题完全不相干。在
相反,你应该
self.units
修改为正确的格式(如果我没弄错,您使用的是python3?您应该在标签中宣布您的Python主要版本…)或者把它转换成
这个答案是我猜测
self.units
可能不是str
,而是unicode
对象。默认情况下,它的隐式转换可能失败,ascii
编解码器用于解码。在您应该确保不要混淆原始字符串和unicode字符串。在
如果
str(self.units)
不起作用,您可能需要将其替换为self.units.decode("utf8")
。在要弄清楚这个过程:
在提示符处输入
a
将以某种方式显示repr(a)
的结果。在repr(a)
调用a.__repr__()
,检查其类型(必须是str
)并显示它。在我不清楚为什么}失败,而
a
或{a.__repr__()
起作用,这就是为什么我一直询问异常的回溯。。。在相关问题 更多 >
编程相关推荐