Python酸洗错误:TypeError:对象pickle不返回列表

Gab*_*iel 1 python pickle astropy astroquery

我知道这个非常古老的问题Python酸洗错误:TypeError:对象pickle没有返回列表.问题与numpy?但唯一给出的答案是相当模糊的.

这是在Python 3.6中重现该问题的代码.

import pickle
from astroquery.irsa import Irsa
from astropy import units as u

# Query region.
table = Irsa.query_region("m31", catalog="fp_psc", spatial="Cone",
                          radius=.5 * u.arcmin)

# Dump table.
with open('table.pkl', 'wb') as f:
    pickle.dump(table, f)

# This is where the issue appears.
with open('table.pkl', 'rb') as f:
    table = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)

尝试加载pickle数据时,它失败了:

Traceback (most recent call last):
  File "/home/gabriel/Descargas/test.py", line 17, in <module>
    table2 = pickle.load(f)
  File "/home/gabriel/anaconda3/envs/cat-match/lib/python3.6/site-packages/astropy/table/column.py", line 238, in __setstate__
    super_class.__setstate__(self, state)
  File "/home/gabriel/anaconda3/envs/cat-match/lib/python3.6/site-packages/numpy/ma/core.py", line 5869, in __setstate__
    super(MaskedArray, self).__setstate__((shp, typ, isf, raw))
TypeError: object pickle not returning list
Run Code Online (Sandbox Code Playgroud)

我怎么能绕过这个?


使用conda,您可以在Python 3环境中安装需求:

conda install astropy
conda install -c astropy astroquery
Run Code Online (Sandbox Code Playgroud)

小智 5

链接的答案提到了numpy蒙面数组在解开它们时造成麻烦.鉴于天体表可能确实具有屏蔽条目(并非每个对象或位置都可能具有例如每个频带或任何相关列的值),这确实可能是您的问题的根源:屏蔽数组.

numpy问题trickers也显示了这个问题:带有对象 dtype的蒙面数组不会破坏.这似乎是在拉取请求8122中解决的.

搜索Numpy 1.12.0发行说明显示了此拉取请求.因此,除非你已经使用了numpy 1.12,否则升级numpy可能是你的价值所在.