在python中加载对象时出现Pickle错误



当我尝试在python中加载文件时,我从dill得到这个错误:

Traceback (most recent call last):
  File "LArSoftSGD.py", line 154, in <module>
    stat_bundle = train_batch_iterator(clf, TOTAL_TRAINED_EVENTS)
  File "LArSoftSGD.py", line 121, in train_batch_iterator
    plot_data.append((test_batch_iterator(clf), tte))
  File "LArSoftSGD.py", line 91, in test_batch_iterator
    minibatch_test = dill.load(stream)
  File "/home/jdoe/.local/lib/python3.4/site-packages/dill/dill.py", line 199, in load
obj = pik.load()
  File "/usr/lib/python3.4/pickle.py", line 1036, in load
dispatch[key[0]](self)
KeyError: 95

有谁知道出了什么问题吗?下面是发生错误的一些代码:

for file in glob.glob('./SerializedData/Batch8202015_1999/*'):
    with open(file, 'rb') as stream:
        minibatch_test = dill.load(stream)

我是dill的作者。这似乎不是一个序列化错误,它很可能是一个编码错误。

本质上,分派是一个pickle对象类型及其pickle函数的字典,键是对象类型。你有一个95作为键,这绝对不是dispatch所期望的。

>>> import dill
>>> dill.dill.pickle_dispatch_copy
{<type 'unicode'>: <function save_unicode at 0x10c8f1cf8>, <type 'dict'>: <function save_dict at 0x10c8f1f50>, <type 'int'>: <function save_int at 0x10c8f1b18>, <type 'long'>: <function save_long at 0x10c8f1b90>, <type 'list'>: <function save_list at 0x10c8f1e60>, <type 'str'>: <function save_string at 0x10c8f1c80>, <type 'function'>: <function save_global at 0x10c8f5140>, <type 'instance'>: <function save_inst at 0x10c8f50c8>, <type 'type'>: <function save_global at 0x10c8f5140>, <type 'NoneType'>: <function save_none at 0x10c8f1a28>, <type 'bool'>: <function save_bool at 0x10c8f1aa0>, <type 'tuple'>: <function save_tuple at 0x10c8f1d70>, <type 'float'>: <function save_float at 0x10c8f1c08>, <type 'classobj'>: <function save_global at 0x10c8f5140>, <type 'builtin_function_or_method'>: <function save_global at 0x10c8f5140>}

你有这样的东西:

>>> key = [95]
>>> dispatch = {}
>>> dispatch[key[0]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 95

加载pickle对象的代码看起来很好……然而,虽然这可能是抛出错误的地方,但它不是错误实际所在的地方。从你上面给出的信息中没有足够的信息来揭示这一点。

相关内容

  • 没有找到相关文章

最新更新