Python 酸洗错误:TypeError:对象泡菜未返回列表。 numpy的问题?

Posted

技术标签:

【中文标题】Python 酸洗错误:TypeError:对象泡菜未返回列表。 numpy的问题?【英文标题】:Python pickling error: TypeError: object pickle not returning list. Issue with numpy? 【发布时间】:2012-01-18 14:09:21 【问题描述】:

我编写了一个脚本来进行一些数据处理,然后在进行更多处理之前对结果进行腌制,这样我就可以调整最终的绘图参数。我正在腌制我创建的两个类的列表。酸洗对每个列表都很好,但取消酸洗一个列表会返回以下错误:

Traceback (most recent call last):
  File "script.py", line 980, in <module>
    main()
  File "script.py", line 956, in promoter_main
    open(os.path.join(pickle_dir, 'doublep.pickle'), 'rb'))
  File "/usr/lib/python2.6/pickle.py", line 1370, in load
    return Unpickler(file).load()
  File "/usr/lib/python2.6/pickle.py", line 858, in load
    dispatch[key](self)
  File "/usr/lib/python2.6/pickle.py", line 1217, in load_build
    setstate(state)
  File "/home/jmerkin/software/numpy/numpy/ma/core.py", line 5468, in __setstate__
    ndarray.__setstate__(self, (shp, typ, isf, raw))
TypeError: object pickle not returning list

正如我所说,一个很好(SingleP 的实例列表),另一个在 unpickling 时给我这个错误(DoubleP 的实例)。我不愿发布该类的整个代码,因为它很长,但基本上,它有几个方法可以填充一些属性。这些属性由布尔值、元组列表、字符串、整数或 numpy.ma.arrays 列表组成。其中一些数组屏蔽了 numpy.nan。

这似乎是一个潜在的相关问题:http://projects.scipy.org/numpy/ticket/897。在这种情况下,问题在于将 np.object 作为数组的 dtype 的数组。但是,我一直在酸洗和解开 numpy.ma.arrays,包括屏蔽了 numpy.nan 的数组,已经有一段时间没有出现问题了。

我是否错过了酸洗的愚蠢之处?我不会在对象被腌制和尝试取消腌制之间更改对象。


我重写了一些代码,这样我就没有将 n x m x l 维度的数组作为某些属性,而是有一个包含 n 个条目的列表,每个条目都是一个 m x l 数组,现在它很开心,可以腌制和解封。我很困惑,但它运行。我不会关闭这个,因为我的问题仍然存在,为什么我会收到这个错误?

【问题讨论】:

您是否在酸洗后关闭了文件,以确保所有前面的 I/O 都被刷新到磁盘? 是的。我使用 pickle.dump(obj, open(filename)),它应该在完成后关闭文件。此外,在酸洗和解酸之间,脚本完成,所以所有剩余的写入都应该被刷新(它检查泡菜文件,如果没有找到,则填充列表)。 pickle.dump 不会关闭文件。 我在转储参数列表中打开文件,所以在转储操作完成后不应该关闭它吗?我在一两个月前写过这篇文章,从那以后就一直在使用它。我更改了 DoubleP 对象中的某些内容并从头开始重新运行它。我已经这样做了很多次,但现在它给了我这些错误。错误消息没有告诉我任何信息,所以我希望有人能对此有所了解。 【参考方案1】:

有一个非常相似的问题:我重写了一个脚本,以便 np.nan 值也被屏蔽(我希望 numpy、scipy 和 matplotlib 可以一致地处理数组)但这导致 pickle.load() 阻碍。我摆脱了蒙面数组,一切都恢复了。解决方案似乎是添加和删除掩码以取悦泡菜。我知道这不是什么解决方案,但它似乎有效。

【讨论】:

以上是关于Python 酸洗错误:TypeError:对象泡菜未返回列表。 numpy的问题?的主要内容,如果未能解决你的问题,请参考以下文章

Python酸洗保持对象身份

Python多处理队列酸洗错误

Python、cPickle、酸洗 lambda 函数

python fbprophet错误,TypeError:'module'对象不可调用

“TypeError:'WebElement'对象不可迭代”错误代码python爬取

Python:Concurrent.Futures 错误 [TypeError:'NoneType' 对象不可调用]