寻求html.unescape("&nbsp")的解决方法

3
这是我的代码:
import os
import html

a = html.unescape("home - study")
b = "test"
print(a)
s = (a, b)
print(s)

这是我的结果:

home - study
('home\xa0-\xa0study', 'test')

为什么结果会打印成这样?
1个回答

2
默认情况下,打印像tupleslists和其他容器时,将使用它们的项的repr。 (在CPython中,选择不实现<container>.__str__,而是让object.__str__填充其插槽。然后,object__str__将调用tuple.__repr__,然后继续调用它包含的元素的repr。有关更多详细信息,请参见PEP 3140。)
对于带有转义代码(例如\xa0)的字符串调用repr实际上不会转义它们:
print(repr(a))
'home\xa0-\xa0study'

为了进一步验证,请尝试print(s[0])。通过直接在位置0提供str对象,Python将调用其__str__并正确转义十六进制。

谢谢您的解释,我现在明白原因了。 - E.Tarrent
1
这个回答似乎暗示这种行为只是由于实现细节造成的...但事实并非如此。预期序列定义一个__str__方法,其中通过调用它们的__repr__获取内部元素的表示形式。实现细节是他们决定使__str____repr__相同,并避免显式定义__str__,因为object.__str__只是调用__repr__。曾经有一份PEP试图改变这一点,但被拒绝了。 - Bakuriu
1
@Bakuriu 我能理解这是如何暗示的。稍微修改了一下正文,以明确哪些是演化实现细节,哪些不是。我之前没有看过那个PEP,谢谢! - Dimitris Fasarakis Hilliard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接