如何识别字节字符串对象是否为pickle对象。
例如,在下面的字典中,如何识别b
是否为酸洗对象而其他对象不是?
example = {'a':1, 'b':b'\x80\x03K\x02.', 'c':b'3'}
答案 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
抛出异常(内存不足等),则返回异常)。