我正在尝试将dict的dict添加到搁置文件中:
>>> 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
Run Code Online (Sandbox Code Playgroud)
索引有点大,但不大。本质上是一个浮点数数组:
>>> 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
Run Code Online (Sandbox Code Playgroud)
这是什么错误?另外,模块或模块文档中是否有我应该寻找有关错误代表什么的更多信息?错误消息不是很有用,至少对我来说是这样:)。
实际上,我对 dbm 模块也有同样的问题,它在我的代码库中是可重现的,但我无法在单独的测试中重现它。
我的印象是,有一个锁可以防止在读取数据库时写入。就我而言,数据库约为 200Kb,有约 10 个键,插入 atime.sleep(1)
可以解决问题,暗示某些异步过程在db[key] = value
.
归档时间: |
|
查看次数: |
1575 次 |
最近记录: |