我的函数需要以字符串或二进制数据的形式接受输入(例如,从文件中读取)。如果是字符串,我想将其转换为原始数据(bytes
或bytearray
)。
在Python 3中,我可以执行data = bytes(data, 'utf8')
。但是,这在Python 2中失败了,因为它仅接受一个参数。反之亦然,data = bytes(data)
在Python 2中有效,但在Python 3中无效,因为它抱怨需要编码才能工作。
为了争论,我们假设所有输入(如果是字符串形式)都是UTF-8编码的。是否有比下面的怪诞更好的方法来实现我想要的目标:
try:
data = bytes(data, 'utf8')
except:
data = bytes(data)
n.b。,data.encode()
在Py3中有效,但在字符串包含非ASCII字节的情况下在Py2中无效。
您可以使用sys.version_info检查版本:
if sys.version_info < (3, 0):
data = bytes(data)
else:
data = bytes(data, 'utf8')
它比依赖异常更具Python性。
如果使用六个py2 / 3兼容性库,则可能更喜欢:
import six
data = bytes(data) if six.PY2 else bytes(data, 'utf8')
这两个版本均适用。即python 2和python 3
data = bytes(str(data).encode("utf-8"))