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 fbprophet错误,TypeError:'module'对象不可调用