Я учусь использовать рассол. Я создал объект 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()
pickle
прекрасно обрабатывает классы namedtuple; классов, определенных в локальном пространстве имен функций, не так много. - person Martijn Pieters   schedule 05.05.2013P = namedtuple("Q", "one two three four")
- person Andrew Hoos   schedule 05.02.2015typename
для namedtuple не соответствует имени класса, возвращаемому namedtuple. См.: stackoverflow.com/a/28149627/3396951 - person Minh Tran   schedule 17.08.2018