为什么使用str.format创建unicode错误?

时间:2016-07-08 14:59:28

标签: python string unicode

我知道在Python 2中,unicode错误是一团糟,但我不明白的是为什么str.format将它们引入其他工作情况。我遇到了一些unicode角色的问题,测试IDLE让我知道了这个:

>>> s = u'\xef'
>>> print s
ï
>>> print "%s" % s
ï
>>> print '' + s
ï
>>> print '{}'.format(s)

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    print '{}'.format(s)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xef' in position 0: ordinal not in range(128)

似乎str.format是问题的唯一例子。我猜测以某种方式该函数做了一个关于只传递ascii合适的字符串的错误假设,但我想知道如何处理这个最好的结果是不稳定的。

只有当它是一个unicode字符串时才会出现这种情况,无论是使用实际字符还是代码。作为普通字符串的两种选择都可以正常工作:

>>> s = 'ï'
>>> print '{}'.format(s)
ï
>>> s = '\xef'
>>> print '{}'.format(s)
ï
>>> s = u'ï'
>>> print '{}'.format(s)

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    print '{}'.format(s)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xef' in position 0: ordinal not in range(128)

1 个答案:

答案 0 :(得分:2)

请记住,当你说

print '{}'.format(s)

您尝试使用unicode字符串格式化的字符串是字节(python2 str类型)。 这样:

print u'{}'.format(s)

工作正常。