gpt4 book ai didi

python - 如何在 Python Pickle 中查找大型对象的错误源

转载 作者:太空狗 更新时间:2023-10-30 00:23:43 24 4
gpt4 key购买 nike

我已经接管了某人的一个相当大的项目的代码。我正在尝试保存程序状态,并且有一个巨大的对象存储了几乎所有其他对象。我正在尝试 pickle 这个对象,但出现了这个错误:

pickle.PicklingError: Can't pickle : it's not found as builtin.module

根据我在 google 上可以找到的内容,这是因为我在某个地方导入了 python init 之外的东西,或者类属性引用了一个模块。所以,我有两个问题:

  1. 有人可以确认这就是出现此错误的原因吗?我在我的代码中寻找正确的东西吗?

  2. 有没有办法找到导致 pickle 困难的代码行/对象成员?回溯只给出 pickle 中发生错误的行,而不是被 pickle 对象的行。

最佳答案

2) 您可以子类化 pickle.Pickler 并对其进行 monkey-patch 以显示其 pickle 内容的日志。这应该可以更容易地追踪问题所在。

import pickle
class MyPickler (pickle.Pickler):
def save(self, obj):
print 'pickling object', obj, 'of type', type(obj)
pickle.Pickler.save(self, obj)

这仅适用于 pickle.Pickler 的 Python 实现。在 Python 3.x 中,pickle 模块默认使用 C 实现,Pickler 的纯 Python 版本称为_Pickler。

# Python 3.x
import pickle
class MyPickler (pickle._Pickler):
def save(self, obj):
print ('pickling object {0} of type {1}'.format(obj, type(obj))
pickle._Pickler.save(self, obj)

关于python - 如何在 Python Pickle 中查找大型对象的错误源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com