gpt4 book ai didi

python - 移植到 Python 3 : string/bytes formatting

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:51 24 4
gpt4 key购买 nike

我正在将一个程序从 Python 2 移植到 Python 3。当值是字节时,我很难处理 %(插值)运算符。

假设我们需要从 Python 2 移植这个表达式:'%s: %s\r\n' % (name, value)

namevalue 在程序的移植版本中是 bytes 类型。结果也应该是 bytes 类型。在 Python 3 中,二进制插值仅计划用于 Python 3.5 (PEP 460)。所以,不确定我是否正确,但只有两种方法可以处理这个问题——适当的连接或字符串编码/解码:

>>> name = b'Host'
>>> value = b'example.com'
>>> # Decode bytes and encode resulting string.
>>> ('%s: %s\r\n' % (name.decode('ascii'), value.decode('ascii'))).encode('ascii')
b'Host: example.com\r\n'
>>> # ... or just use concatenation.
>>> name + b': ' + value + b'\r\n'
b'Host: example.com\r\n'

就我而言,这两种解决方案都有点难看。当值是 bytes 时,是否有关于如何移植字符串格式的一些约定/建议?

请注意,不应使用 2to3 工具,该程序应能在 Python 2 和 3 下运行。

最佳答案

对于 CPython,我制作了 bttf库,我将添加一些移植功能;目前它支持 monkeypatching 3.5 字节格式化代码到 Python 3.3 和 3.4:

因此,在您拥有之前:

>>> b'I am bytes format: %s, %08d' % (b'asdf', 42)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'

bttf:

>>> from bttf import install
>>> install('bytes_mod')
>>> b'I am bytes format: %s, %08d' % (b'asdf', 42)
b'I am bytes format: asdf, 00000042'

__future__s 不同,补丁是解释器范围的。

关于python - 移植到 Python 3 : string/bytes formatting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23990241/

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