编写Python版本无关的代码:struct.p

2024-04-27 04:40:10 发布

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

假设您有以下Python2代码:

#!/usr/bin/env python
import struct

struct.pack('s', 'hello')

这在Python2下可以正常工作,但是它不会在Python3下运行,因为结构包改变。结构包现在需要一个bytes对象作为字符串标识符,而不再是字符串。在Python3下运行此代码的修复程序如下: ^{cd1>。但同样,这段代码不会在Python2下运行:-)

我正在尝试独立于版本的代码,因为我不想强迫任何人安装python2或3。在

让这段代码独立于版本的最佳方法是什么?在


Tags: 对象字符串代码import版本envhellobytes
1条回答
网友
1楼 · 发布于 2024-04-27 04:40:10

python2str类型在python3中基本上被重命名为bytes,而{}类型则变成了{}。实际上,您是将python2中的bytestrings和python3中的Unicode字符串发送到struct.pack()。在

正确的解决方法可能是在python2和python3中到处使用Unicode(因此在使用struct.pack()时总是进行编码,而不管Python的版本是什么)。在

另一种方法是使用isinstance测试:

value = 'hello'
if not isinstance(value, bytes):
    vaule = value.encode('utf8')

这在python2和python3中都有效,因为在python2中,bytes是{}的别名。在

相关问题 更多 >