相关疑难解决方法(0)

在python3下解开python2 datetime

我选择使用pickle(+ base64 + TCP套接字)在我的python3代码和旧版python2代码之间通信数据,但是我在datetime对象方面遇到了麻烦:

PY3对象在PY2上的修补效果很好,但是TypeError在调用datetime构造函数时,相反会引发a ,然后UnicodeEncodeError在load_reduce函数中引发a 。

这个要点提供了简短的测试程序和日志,包括PY2和PY3泡菜的dis输出

  • 我在PY2中使用pickle.dumps(reply, protocol=2)
    然后pickle._loads(pickled, fix_imports=True, encoding='latin1')在PY3中使用
    (尝试None和utf-8均未成功)

  • 本机cPickle loads解码也失败,我仅使用纯python _loads进行调试。

这是一个datetime错误吗?也许datetime.__getstate__/__setstate__实现不兼容?

欢迎在代码上做任何评论...

补充

PY-3.4.0泡菜:

 0: \x80 PROTO      2
 2: c    GLOBAL     'datetime datetime'
21: q    BINPUT     0
23: c    GLOBAL     '_codecs encode'
39: q    BINPUT     1
41: X    BINUNICODE u'\x07\xde\x07\x11\x0f\x06\x11\x05\n\x90'
58: q    BINPUT     2
60: X    BINUNICODE u'latin1'
71: q    BINPUT     3
73: \x86 TUPLE2 …
Run Code Online (Sandbox Code Playgroud)

python compatibility pickle python-2.7 python-3.x

6
推荐指数
1
解决办法
806
查看次数

标签 统计

compatibility ×1

pickle ×1

python ×1

python-2.7 ×1

python-3.x ×1