2011-02-14 82 views
4

我想類型的字典字典添加到貨架文件:python擱置dbm.error?

>>> d = shelve.open('index.shelve') 
>>> d 
<shelve.DbfilenameShelf object at 0x21965f0> 
>>> print(list(d.keys())) 
[] 
>>> d['index'] = index 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/bns/rma/local/python/lib/python3.1/shelve.py", line 124, in __setitem__ 
    self.dict[key.encode(self.keyencoding)] = f.getvalue() 
_dbm.error: cannot add item to database 

指數是有點大,但不是很大。它本質上是一組浮標:

>>> len(index) 
219 
>>> a = [ index[k][k1] for k in index for k1 in index[k] ] 
>>> len(a) 
59995 
>>> all([ type(x) is float for x in a ]) 
True 

什麼是這個錯誤?此外,有沒有在模塊或模塊文件中的某處,我應該尋找更多的信息在錯誤代表什麼?錯誤消息是不是很豐富,至少對我來說:)。

+0

我應該也說過我在使用python 3.1.2。 – mathtick 2011-02-14 19:13:06

+0

您可以設置擱架的元素嗎?例如,如果`index`是一個整數,你會得到同樣的崩潰嗎?怎麼樣一個字典,或一個更小的字典? – Andrew 2011-02-14 19:34:16

回答

1

我實際上與dbm模塊有同樣的問題,它在我的代碼庫中是可重現的,但我無法在單獨的測試中重現它。

我的印象是有一個鎖可以防止在讀取數據庫時寫入。在我的情況下,數據庫是〜200Kb,用〜10個鍵,插入一個time.sleep(1)就可以解決問題,暗示在db[key] = value時刻某些異步處理沒有完成。