Я изучаю, как использовать рассол. Я создал объект namedtuple, добавил его в список и попытался рассортировать этот список. Тем не менее, я получаю следующее сообщение об ошибке:Как правильно сортировать экземпляр namedtuple
pickle.PicklingError: Can't pickle <class '__main__.P'>: it's not found as __main__.P
Я обнаружил, что если я побежал код без окружив его внутри функции, она прекрасно работает. Есть ли дополнительный шаг, необходимый для рассортирования объекта при обертывании внутри функции?
Вот мой код:
from collections import namedtuple
import pickle
def pickle_test():
P = namedtuple("P", "one two three four")
my_list = []
abe = P("abraham", "lincoln", "vampire", "hunter")
my_list.append(abe)
f = open('abe.pickle', 'w')
pickle.dump(abe, f)
f.close()
pickle_test()
К сожалению, рассол, похоже, плохо работает с именованными. – Antimony
@Antimony: 'pickle' обрабатывает классы namedtuple просто отлично; классы, определенные в локальном пространстве имен функций, не так много. –
Возможный дубликат [Python: невозможно сортировать тип X, поиск атрибута не удался) (http://stackoverflow.com/questions/4677012/python-cant-pickle-type-x-attribute-lookup-failed) – Air