AttributeError: Can't pickle local object '<locals>.<lambda>'
AttributeError: Can't pickle local object '<locals>.<lambda>'
我正在尝试 pickle 使用以下方法创建的嵌套字典:
collections.defaultdict(lambda: collections.defaultdict(int))
我的简化代码是这样的:
class A:
def funA(self):
#create a dictionary and fill with values
dictionary = collections.defaultdict(lambda: collections.defaultdict(int))
...
#then pickle to save it
pickle.dump(dictionary, f)
然而它给出了错误:
AttributeError: Can't pickle local object 'A.funA.<locals>.<lambda>'
打印字典后显示:
defaultdict(<function A.funA.<locals>.<lambda> at 0x7fd569dd07b8> {...}
我尝试在该函数中使字典成为全局字典,但错误是一样的。
我感谢对此问题的任何解决方案或见解。谢谢!
pickle
记录对函数的引用(模块和函数名称),而不是函数本身。 unpickling 时,它将加载模块并按名称获取函数。 lambda
创建匿名函数对象,这些对象没有名称并且加载程序无法找到。解决方案是切换到命名函数。
def create_int_defaultdict():
return collections.defaultdict(int)
class A:
def funA(self):
#create a dictionary and fill with values
dictionary = collections.defaultdict(create_int_defaultdict)
...
#then pickle to save it
pickle.dump(dictionary, f)
我正在尝试 pickle 使用以下方法创建的嵌套字典:
collections.defaultdict(lambda: collections.defaultdict(int))
我的简化代码是这样的:
class A:
def funA(self):
#create a dictionary and fill with values
dictionary = collections.defaultdict(lambda: collections.defaultdict(int))
...
#then pickle to save it
pickle.dump(dictionary, f)
然而它给出了错误:
AttributeError: Can't pickle local object 'A.funA.<locals>.<lambda>'
打印字典后显示:
defaultdict(<function A.funA.<locals>.<lambda> at 0x7fd569dd07b8> {...}
我尝试在该函数中使字典成为全局字典,但错误是一样的。 我感谢对此问题的任何解决方案或见解。谢谢!
pickle
记录对函数的引用(模块和函数名称),而不是函数本身。 unpickling 时,它将加载模块并按名称获取函数。 lambda
创建匿名函数对象,这些对象没有名称并且加载程序无法找到。解决方案是切换到命名函数。
def create_int_defaultdict():
return collections.defaultdict(int)
class A:
def funA(self):
#create a dictionary and fill with values
dictionary = collections.defaultdict(create_int_defaultdict)
...
#then pickle to save it
pickle.dump(dictionary, f)