Ошибка выбора Python: TypeError: объект pickle не возвращает список
Я знаю, если этот очень старый вопрос Python Pickling Ошибка: 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)
При попытке загрузить маринованные данные происходит сбой:
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
Как я могу обойти это?
Используя conda, вы можете установить требования в среде Python 3 с помощью:
conda install astropy
conda install -c astropy astroquery
1 ответ
В связанном ответе упоминаются массивы с масками в масках, вызывающие проблемы при их очистке. Учитывая, что таблицы астропии действительно могут иметь маскированные записи (не каждый объект или позиция могут иметь значение, например, для каждой полосы или любых соответствующих столбцов), это действительно может быть источником вашей проблемы: маскированные массивы.
Об этой проблеме свидетельствует и хитрая проблема: массив Mask с объектом dtype не распаковывается. И это, кажется, решается в запросе 8122.
Изучение заметок о выпуске для Numpy 1.12.0 показывает этот запрос на получение. Так что, если вы уже используете numpy 1.12, возможно, стоит обновить numpy.