我想创建一个使用可写入文件的字节格式字符串的python脚本。
所以问题是这样的:
packed_int = struct.pack('>I', 1234)
result = packed_int + data
这是问题所在:在python 3中,由于str和字节之间的连接,这将导致错误。
所以我用以下代码解决了这个问题:
data = data.encode('utf-8')
packed_int = struct.pack('>I', 1234)
result = packed_int + data
现在,如果数据已经是字节格式,则将出现没有编码方法的错误。所以我这样做了:
if type(data) is not bytes:
data = data.encode('utf-8')
最后一个问题是在python 2中最后一个代码片段不起作用。
如何在不检查python版本的情况下解决问题?
答案 0 :(得分:0)
您可以将hasattr
用于duck typing:
if hasattr(data, 'encode'):
data = data.encode('utf-8')
或者您做类似的事情,这就是six
兼容性库的作用:
import sys
PY3 = sys.version_info[0] == 3
binary_type = (bytes if PY3 else str)
text_type = (str if PY3 else unicode)
# ...
if isinstance(data, text_type):
data = data.encode('utf-8')