检测字符串类型

时间:2019-04-16 14:06:29

标签: python-3.x string python-2.7

我想创建一个使用可写入文件的字节格式字符串的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版本的情况下解决问题?

1 个答案:

答案 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')