gpt4 book ai didi

python - 相当于适用于 Python 2.7 和 3.x 的 unicode() 函数吗?

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:10 25 4
gpt4 key购买 nike

我正在尝试调整一些旧代码,使其可用于 Python 2 和 3。我正在使用 six package对于这个任务。

如果我在 2.7 中有 u'abc',我可以使用 six.u()函数并将其替换为 six.u('abc') 以使其在 2.7 和 3.x 中都能工作。

我该如何做类似的事情:

  • unicode(值、errors='ignore'、encoding='utf-8')

3.x 中没有 unicode 函数,我不能只用 str 替换它,因为这会改变 2.7 中的含义。

  • if isinstance(value, basestring): # 做某事

3.x 中没有 basestring,而且我不能在不改变含义的情况下将其替换为 str

当然,我可以使用py2/3 checks使用 six.PY2six.PY3 运行两个版本之一,但有更好的方法吗?

最佳答案

要回答问题的第二部分,您可以将 if isinstance(value, basestring): 替换为 six.string_types:

import six
if isinstance(value, six.string_types):
pass

要回答第一部分,我首先建议将其放在代码的顶部:

from __future__ import unicode_literals

这将使所有 Python2 str 文字变成 unicode,这将是兼容性方面的重要第一步。

其次,如果您确实需要某种兼容性转换功能,请尝试以下操作:

def py23_str(value):
try: # Python 2
return unicode(value, errors='ignore', encoding='utf-8')
except NameError: # Python 3
try:
return str(value, errors='ignore', encoding='utf-8')
except TypeError: # Wasn't a bytes object, no need to decode
return str(value)

我会说我已经编写了一些 Python2/3 兼容库,并且我从来没有需要这样做。在代码顶部添加 from __future__ import unicode_literals 并对 bytes (或 Python2 中的 str)调用 .decode ) 对象创建时(即以 'rb' 模式从文件中读取)是迄今为止我所需要的。

关于python - 相当于适用于 Python 2.7 和 3.x 的 unicode() 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41580439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com