我正在学习如何使用pickle。我创建了一个namedtuple对象,将其添加到列表中,并尝试对该列表进行pickle。但是,我遇到了以下错误:
pickle.PicklingError: Can't pickle <class '__main__.P'>: it's not found as __main__.P
我发现如果不把代码包装在一个函数内运行,它可以完美地工作。当将对象包装在函数内时,是否需要额外的步骤来进行pickle处理?
以下是我的代码:
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)
with open('abe.pickle', 'wb') as f:
pickle.dump(abe, f)
pickle_test()
pickle
可以很好地处理namedtuple
类;但是在函数局部命名空间中定义的类就不行了。 - Martijn Pieters