python 2 和 python 3 pickle 的兼容性问

2019-02-27  本文已影响0人  虚胖一场

由于工作原因,需要在 python 3 下用 pickle.loadpickle.loads 方法反序列化在 python 2 下用 cPickle.dumpcPickle.dumps 方法序列化的对象。

当对象类型是 numpy 的 array、pandas 的 DataFrame 和 Series,以及 datetime、date、time 时,会报 UnicodeDecodeError。根据官方文档,反序列化时设置 encoding='latin1' 可解决这一问题。

但经过实测,当对象为 datetime 类型时,使用上述设置,在 python 3.6.8 和 python 3.7.2 下可以正确运行,但在 python 3.6.5 和 python 3.7.0 下则会报 TypeError。此外,当设置 encoding='bytes'时,上述四个 python 版本下均可正确运行,但该设置无法反序列化 array、DataFrame 和 Series。如果你的对象是一个既包含 datetime、又包含 array 的复杂对象,而你的环境又刚刚好是 python 3.6.5 或 python 3.7.0,那么就只能掀桌子了。(完

上一篇下一篇

猜你喜欢

热点阅读