【发布时间】:2013-04-28 22:30:04
【问题描述】:
我正在学习如何使用泡菜。我创建了一个 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 似乎不适用于命名元组。
-
@Antimony:
pickle处理 namedtuple 类就好了;在函数本地命名空间中定义的类不多。 -
@AirThomas 这个问题是在一年前提出/回答的:)
-
未拍摄。我只是觉得这很有趣。问题链接确实非常有用:)
标签: python python-2.7 pickle namedtuple