我有一个使用 python 3 运行的脚本,除了字符串文字。Python 2.x 强制我用 u'' 作为字符串文字的前缀,而 python 3 不理解它。怎么解决呢?
3 回答
在 python 2.x 中运行它时试试这个:
>>> from __future__ import unicode_literals
>>> s=['xx','yy','zz','aa']
>>> s
[u'xx', u'yy', u'zz', u'aa']
在 python 3.x 中执行时同样的事情:
>>> from __future__ import unicode_literals
>>> s=['xx','yy','zz','aa']
>>> s
['xx', 'yy', 'zz', 'aa']
几个选项:
您可以u("a\u0020")
使用以下兼容性函数将所有 unicode 字符串编写为 。一个类似的技巧可以让你b('')
在 Python 2.5 下支持字节。不过,额外的函数调用会对性能造成很小的影响。(这是六2/3 兼容性库使用的)。
if sys.version_info < (3,0):
def u(s):
return s.decode("unicode_escape")
else:
def u(s):
return s
其次,如果您不必支持 Python 2.5,则可以使用from __future__ import unicode_literals
,并且该模块的 Python 2.6/2.7 字符串的行为与 3.x 相同。
最后,如果您不必支持 Python 3.0-3.2,您可以使用,因为 Python 3.3出于普遍压力(主要来自 web 框架开发人员)u''
重新添加了对前缀的支持。u''
您使用包装方法,通常称为u
.
这是我的版本(从Porting to Python 3,如果您使用相同的代码同时支持 Python 2 和 Python 3,您应该阅读它。):
import sys
if sys.version < '3':
import codecs
def u(x):
return codecs.unicode_escape_decode(x)[0]
else:
def u(x):
return x
然后使用 u('String') 代替 u'String'。对于非 ascii 文本,您需要使用\x00
,\u0000
或\N{name}
语法。
Python 3.3 将再次支持 u'' 语法,以避免这种情况,但它仍处于测试阶段。
该from __future__ import unicode_literas
功能已被证明几乎没有用,因为您需要使用包装器来制作本机字符串,这不是一种改进。