设置了defaultfactory的defaultdict不工作
大家好!
我有以下奇怪的问题,由于我是新手,不知何故,我想不出一个优雅的解决方案。这个问题归结为以下问题:
如何对设置了DEFAULT_FACTORY属性的集合进行PICLE处理?
例如(从空闲控制台):
选择 | 换行 | 行号
- >>> words = collections.defaultdict(lambda: 1)
- >>> f = file("temp","w")
- >>> pickle.dump(words,f)
- Traceback (most recent call last):
- File "<pyshell#77>", line 1, in <module>
- pickle.dump(words,f)
- File "C:\Python25\lib\pickle.py", line 1362, in dump
- Pickler(file, protocol).dump(obj)
- File "C:\Python25\lib\pickle.py", line 224, in dump
- self.save(obj)
- File "C:\Python25\lib\pickle.py", line 331, in save
- self.save_reduce(obj=obj, *rv)
- File "C:\Python25\lib\pickle.py", line 401, in save_reduce
- save(args)
- File "C:\Python25\lib\pickle.py", line 286, in save
- f(self, obj) # Call unbound method with explicit self
- File "C:\Python25\lib\pickle.py", line 562, in save_tuple
- save(element)
- File "C:\Python25\lib\pickle.py", line 286, in save
- f(self, obj) # Call unbound method with explicit self
- File "C:\Python25\lib\pickle.py", line 748, in save_global
- (obj, module, name))
- PicklingError: Can't pickle <function <lambda> at 0x00C030B0>: it's not found as __main__.<lambda>
- If I repeat the same with words = collections.defaultdict() everything goes fine..
- In my real code I have a class that has an object property which is a defaultdict with the same default_factory set. I want to dump an object from this class with pickle and I get the following error:
- Traceback (most recent call last):
- File "BayesianFilter.py", line 125, in <module>
- pickle.dump(bf,file(sys.argv[1]+'.bf','w'))
- File "C:\Python25\lib\copy_reg.py", line 69, in _reduce_ex
- raise TypeError, "can't pickle %s objects" % base.__name__
- TypeError: can't pickle function objects
如果我没有在defaultdict对象的构造函数中设置DEFAULT_FACTORY,则一切正常。这让我认为问题恰恰是这样的。
我知道Pickle不能转储具有函数属性的对象。但是,在转储之前,我没有找到从defaultdict对象取消设置DEFAULT_FACTORY属性的方法。在创建了defaultdict对象之后,我也没有找到再次设置它的方法。
有谁知道如何优雅地解决这个问题?
谢谢你的帮助