【发布时间】:2016-06-20 18:32:01
【问题描述】:
如何创建函数的pickle文件(defaultDict)?我得到的错误是
不能pickle function objects
from collections import defaultdict
dtree = lambda: defaultdict(tree)
try: import cPickle as pickle
except: import pickle
#Create defaultdict object:
hapPkl = dtree()
#Create Pickle file
f = open("hapP.pkl","wb")
pickle.dump(hapPkl,f)
f.close()
堆栈跟踪:
TypeError Traceback (most recent call last)
<ipython-input-287-376cac3b4f0d> in <module>()
1 f = open("hapP.pkl","wb")
----> 2 pickle.dump(hapPkl,f)
3 f.close()
/usr/lib64/python2.7/copy_reg.pyc in _reduce_ex(self, proto)
68 else:
69 if base is self.__class__:
---> 70 raise TypeError, "can't pickle %s objects" % base.__name__
71 state = base(self)
72 args = (self.__class__, base, state)
TypeError: can't pickle function objects
【问题讨论】:
-
tree来自哪里?你只定义dtree。 -
在 Python 3 中,酸洗函数在使用
def语句定义时有效,但在使用lambda定义时无效(即使lambda分配给多变的)。试试def dtree(): return defaultdict(dtree)可能吗? -
@Blckknght 使用 Python 2。
-
@user2357112,奇怪,不会抛出错误
-
我在写上面的评论时没有检查,但在 Python 2 中的行为是相同的(只是错误消息不太清楚)。
标签: python lambda pickle defaultdict