如何使Python字符串版本不可知

2024-06-23 18:58:59 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使Python字符串与它们所使用的Python版本无关?在

我试图维护可以与Python2.7和Python3.*一起工作的代码,但我遇到了很多违反直觉的错误。例如,这在Python 2.7中非常适用:

print('Job: %s' % job)

但是在Python 3.3中失败了,错误是:

^{pr2}$

如果我把那行改成:

print(('Job: %s' % job).encode('utf-8'))

这在Python3.3中修复了它……但是这破坏了Python2.7,现在它抛出了完全相同的错误。在

尝试在Python中管理字符串感觉就像在玩“打鼹鼠”。如何对字符串进行可靠的编码,使它们在所有版本的Python中都能正常工作?在


Tags: 字符串代码版本编码错误jobpython3utf
3条回答

这在Python2.7和3.3+中都可以使用:

print(u'Job: {}'.format(job))

如果它仍然失败,那么你的问题就存在于其他地方。不知何故,job已经被编码了,您需要正确地定义__str__和{}魔术。在

解决方案将取决于您要针对哪个精确的Python版本,但是如果2.7足够向后兼容,您可以

from __future__ import unicode_literals

这在Python3(至少3.2+)中是不可操作的,并且可以实现Python2.7中的预期。在

^{pr2}$

请参见http://python-future.org/unicode_literals.html上的注意事项,它指出“未来”并不真正涵盖3.0-3.2。因此,这个特殊的东西似乎也像我在3.1中所期望的那样工作。在

six库是为以下内容而构建的:

import six
print("%s" % six.u(job))

相关问题 更多 >

    热门问题