我在我的代码中遇到过几次这个问题,并且无法在一个小案例中重现它,但我希望有人能指出我正确的方向。它在创建保存对象时发生(它基本上将我的程序的不同部分打包为一系列嵌套的字典,然后将它们腌制以写入文本文件)。这是代码的相关部分:
so = {}
for l in self.components.items():
so[l[0]] = l[1].createSaveObject()
temp = so
print "Component SO:",temp
print "Component Pickled:",jsonpickle.encode(temp)
return jsonpickle.encode(temp)
因此,该函数循环遍历我的组件,为每个组件创建字典项,然后返回腌制结果。问题显示在两个打印语句中,它们给出以下输出(被截断以忽略正在被腌制而没有问题的工作组件):
Component SO: {..., 'points': {201: [(43, 614.6), (268, 614.6), (268, 254.6), (43, 254.6)], 2041: [(79.5, 607.15999999999997), (304.5, 607.15999999999997), (304.5, 247.16), (79.5, 247.16)]},...}
Component Pickled: {..., "points": {"201": [{"py/tuple": [43, 614.6]}, {"py/tuple": [268, 614.6]}, {"py/tuple": [268, 254.6]}, {"py/tuple": [43, 254.6]}], "2041": [{"py/tuple": [null, null]}, {"py/tuple": [null, null]}, {"py/tuple": [null, null]}, {"py/tuple": [null, null]}]},...}
如您所见,包含高精度数字(以及同一部分中被截断为常规值的其他元素)的字典条目被编码为 null。我无法从 python shell 中重现它——它只在程序运行时发生。但是,鉴于两个输出之间的唯一区别是 jsonpickle.encode 调用,我不确定如何查找源。
谢谢!