2016-02-15 30 views
0

我一直在使用dill自從this question of mine得到包維護者的非常好的回答。蒔蘿:當加載存儲的對象,得到'dispatch [key](self)KeyError:' x7f'`

然而,最近在我的使用情況下,我收到以下錯誤:

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' 

什麼可能這是什麼意思?

我使用dill版本:'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 
+0

與您的問題類似嗎? http://stackoverflow.com/a/26350991/4646678 –

+0

可能是一些編碼問題,類似於http://stackoverflow.com/a/11314602/4646678。如果是這樣,我認爲'dill'缺少'encoding'關鍵字。 –

+0

@MikeMcKerns重:http://stackoverflow.com/a/26350991/4646678,它乍看上去相似,但幸運的是我並確保解壓文件用gzip('gzip.open'),而不是僅僅使用正常文件打開閱讀它? – user89

回答

1

顯然,答案是從升級至dill-0.2.6.dev0

+0

我接受你的答案,但我不能完全確定,如果新的錯誤,我得到的是不相關的...它仍然有'派遣[鑰匙]'位...但只是有點不同?見:https://github.com/uqfoundation/dill/issues/158 – user89

+0

謝謝。我會看看這個問題並直接解決它。 –