0

自从包维护者很好地回答了我的这个问题dill以来,我一直在使用。

然而,最近,在我的用例中,我收到以下错误:

stored_env = dill.load(f_in)
  File "A:\anaconda\lib\site-packages\dill\dill.py", line 250, in load
    obj = pik.load()
  File "A:\anaconda\lib\pickle.py", line 864, in load
    dispatch[key](self)
KeyError: '\x7f'

这可能意味着什么?

我正在使用dillversion: '0.2.5',由pip install dill

我试过设置dill.detect.trace(True),但我没有得到任何输出。

编辑:这是一个不起作用的最小示例:

#test.py
import numba as nb
import numpy as np

@nb.jit(nopython=True)
def my_fast_vector_add(x, y):
    num_elements = x.shape[0]
    z = np.zeros(num_elements, dtype=np.float64)

    for i in range(num_elements):
        z[i] = x[i] + y[i]

    return z  

class Environment():
    def __init__(self):
        self.x = np.random.rand(10)
        self.y = np.random.rand(10)

    def my_vector_add(self):
        return my_fast_vector_add(self.x, self.y)

以及将它们组合在一起的代码:

#doit.py
import test
import dill
import os
import shutil
import gzip

env = test.Environment()
print "init add result: ", env.my_vector_add()
pkl_path = "test.pkl"

with open(pkl_path, 'w') as f:
    dill.dump(env, f)

compressed_path = "test.zip"

with open(pkl_path, 'r') as f_in, gzip.open(compressed_path, 'wb') as f_out:
    shutil.copyfileobj(f_in, f_out)

os.remove(pkl_path)

stored_env = None
with gzip.open(compressed_path, 'r') as f_in:
    stored_env = dill.load(f_in)
    print "loaded add result: ", stored_env.my_vector_add()

产生的错误是:

    exec(compile(scripttext, filename, 'exec'), glob, loc)
  File "A:/dill_issue/doit.py", line 25, in <module>
    stored_env = dill.load(f_in)
  File "A:\anaconda\lib\site-packages\dill\dill.py", line 250, in load
    obj = pik.load()
  File "A:\anaconda\lib\pickle.py", line 864, in load
    dispatch[key](self)
  File "A:\anaconda\lib\pickle.py", line 886, in load_eof
    raise EOFError
EOFError
4

1 回答 1

1

显然答案是从升级dill-0.2.5dill-0.2.6.dev0.

于 2016-02-24T11:00:49.367 回答