Pac*_*ace 8 python python-2.x python-3.x
我正在移植一个库,以便它兼容python 2和3.库从调用应用程序接收字符串或类似字符串的对象,我需要确保这些对象转换为unicode字符串.
在python 2中,我可以这样做:
unicode_x = unicode(x)
Run Code Online (Sandbox Code Playgroud)
在python 3中,我可以这样做:
unicode_x = str(x)
Run Code Online (Sandbox Code Playgroud)
但是,我拥有的最佳跨版本解决方案是:
def ensure_unicode(x):
if sys.version_info < (3, 0):
return unicode(x)
return str(x)
Run Code Online (Sandbox Code Playgroud)
这肯定不是很好(虽然它的工作原理).有更好的解决方案吗?
我知道unicode_literals和u前缀,但这两个解决方案不起作用,因为输入来自客户端,而不是我的库中的文字.
Mar*_*ers 11
不要重新发明兼容性层轮.使用six兼容层,这是一个小型单文件项目,可以包含在您自己的项目中:
Six支持自2.6以来的每个Python版本.它只包含在一个Python文件中,因此可以轻松地复制到项目中.(必须保留版权和许可声明.)
它包含一个six.text_type()可执行的调用,将值转换为Unicode文本:
import six
unicode_x = six.text_type(x)
Run Code Online (Sandbox Code Playgroud)
在项目源代码中,这被定义为:
import sys
PY2 = sys.version_info[0] == 2
PY3 = sys.version_info[0] == 3
# ...
if PY3:
# ...
text_type = str
# ...
else:
# ...
text_type = unicode
# ...
Run Code Online (Sandbox Code Playgroud)