如何识别字节字符串是否是pickle对象?

时间:2017-01-29 17:13:56

标签: python python-3.x pickle

如何识别字节字符串对象是否为pickle对象。

例如,在下面的字典中,如何识别b是否为酸洗对象而其他对象不是?

example = {'a':1, 'b':b'\x80\x03K\x02.', 'c':b'3'}

1 个答案:

答案 0 :(得分:5)

虽然有方法可以判断是否可能流是一个pickle流(例如,第一个字节始终为\x03,后跟协议号,此处为{{ 1}},最后一个字节也总是b'.'),一般来说很难知道(在随机字符串中第一个字节是\x80可能是巧合)。所以你最好简单地尝试取消它,看看是否有效:

import pickle

def is_pickle_stream(stream):
    try:
        pickle.loads(stream)
        return True
    except UnpicklingError:
        return False

如果流是pickle流,则上述方法将返回True,如果不是,则返回False,如果loads抛出异常(内存不足等),则返回异常)。