如何在复杂物体内定位不能酸洗的物体

How to locate object that cannot be pickled inside complex object

提问人:roulette01 提问时间:10/23/2023 最后编辑:Brian61354270roulette01 更新时间:10/23/2023 访问量:36

问:

与我之前的问题有关:如何更改 pickle 文件中的 import 语句?

我正在尝试更改序列化文件中的 import 语句。在尝试重新序列化时,它最终导致了一些意想不到的问题,特别是:

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    CP.dump(data, file)
  File "/path/to/lib/python2.7/copy_reg.py", line 70, in _reduce_ex
    raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle Cursor objects

(是的,不幸的是,我在这里仅限于 py2)

序列化对象是一个类实例。我删除了我认为导致此错误的光标,但在删除它后,我仍然观察到此错误,因此这告诉我其他地方还有另一个光标。问题是这个类实例非常大,并且由许多其他递归类实例组成。我不想深入研究所有这些来找到光标,所以我想知道是否有一种快速的方法可以确定光标来自哪里?

另外,它没有说它是什么类型的 Cursor,但我认为它可能是一个 sqlite3 游标。

python 序列化 游标 pickle

评论

0赞 Selcuk 10/23/2023
你看到这个问题了吗?
0赞 roulette01 10/23/2023
@Selcuk啊,不,我没有,我认为第一个答案可能会有所帮助。我实际上试图打印之前的一些东西,但它安装在我没有写入权限的某个目录中,所以我一直在等待授予访问权限copy_reg.py
0赞 roulette01 10/23/2023
@Selcuk 刚刚获得编辑权限,我从上面的答案中添加了建议的打印语句,但这并不是很有帮助。它打印了我已经怀疑过的东西,但没有告诉我这个对象属于哪个类print self # new<sqlite3.Cursor object at 0x7f02acd473b0>
0赞 Selcuk 10/23/2023
您也可以在运行时对方法进行猴子修补,而无需实际修改文件。我不再有 Python 2,所以我可以进一步提供帮助,对不起。_reduce_ex.py

答: 暂无答案