从python 2.7移动到3.6时加载Autovification文件时出现问题,KeyError:';口述类型';

从python 2.7移动到3.6时加载Autovification文件时出现问题,KeyError:';口述类型';,python,dictionary,autovivification,Python,Dictionary,Autovivification,在python 2.7中,我将一组文件存储为以下对象: class AutoVivification(dict): """Implementation of perl's autovivification feature.""" def __getitem__(self, item): try: return dict.__getitem__(self, item) except KeyError:

在python 2.7中,我将一组文件存储为以下对象:

class AutoVivification(dict):
    """Implementation of perl's autovivification feature."""

    def __getitem__(self, item):
        try:
            return dict.__getitem__(self, item)
        except KeyError:
            value = self[item] = type(self)()
            return value
这是我的

我把它们腌了,可以装得很好。但是在Python3.6中,当尝试加载同一个文件时,会出现以下错误

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.1\helpers\pydev\_pydevd_bundle\pydevd_exec2.py", line 3, in Exec
    exec(exp, global_vars, local_vars)
  File "<string>", line 2, in <module>
  File "C:\Python36\lib\site-packages\dill\_dill.py", line 577, in _load_type
    return _reverse_typemap[name]
KeyError: 'DictType'

如何使用python 3.6加载文件?

pickle中存在不兼容。尝试在这里搜索,你会发现几个不同的问题和解决方案。我不认为这是一个棘手的问题。因为我在协议2中将它们保存为pickle,所以如果我使用Python3.6,它应该是协议3,并且应该能够读取协议2。我尝试了另一种方法(保存在pickle 3中,加载在pickle 2中,得到了一个错误,我很容易找到解决方案),因此pickle中存在不兼容。尝试在这里搜索,你会发现几个不同的问题和解决方案。我不认为这是一个棘手的问题。因为我在协议2中将它们保存为pickle,所以如果我使用Python3.6,它应该是协议3,并且应该能够读取协议2。我尝试了另一种方法(保存在pickle 3中,加载在pickle 2中,得到了一个错误,我很容易就找到了解决方法)
with open('data.pkl', 'rb') as f:
    return pickle.load(f)