Python 修复损坏的搁置缓存

Python 修复损坏的搁置缓存,python,database,shelve,Python,Database,Shelve,我创建的搁置不允许我在没有以下故障的情况下访问密钥 x=shelve.open('my_shelve.pkl')) x、 按键() bsddb.db.DBPageNotFoundError:(-30986,'BDB0075 db\u PAGE\u NOTFOUND:请求的页面未找到') 但是,我可以检查工具架是否包含这样的钥匙: x中的“some-key” 此外,Shelf将返回正确的数据,其中包含 x['some-key'] 我没有其他地方的密钥列表,因此我希望以某种方式检索密钥,以便检索数据

我创建的搁置不允许我在没有以下故障的情况下访问密钥

x=shelve.open('my_shelve.pkl'))
x、 按键()

bsddb.db.DBPageNotFoundError:(-30986,'BDB0075 db\u PAGE\u NOTFOUND:请求的页面未找到')

但是,我可以检查工具架是否包含这样的钥匙:

x中的“some-key”

此外,Shelf将返回正确的数据,其中包含

x['some-key']

我没有其他地方的密钥列表,因此我希望以某种方式检索密钥,以便检索数据,或者以其他方式修复数据库的问题


我正在使用Python 2.7.6

当数据库文件损坏时(例如,过去可能无法对其调用
close
),您可能无法恢复其所有内容(文件格式没有足够的冗余来支持)

但是,您可能可以按如下方式恢复其中的一部分:

recov = {}
try:
    for k in x:
        recov[k] = x[k]
except Exception:
    pass

用这种方法无法预测您能够恢复多少个键(以及相关的值),但至少不要求所有键(正如我想象您正在使用
x.keys()
——您没有告诉我们您使用的是哪个Python版本,但我猜是2您可能可以恢复其中的一些内容…

我使用的是Python 2.7.6,但我无法用它恢复任何内容(它甚至在进入循环体之前就失败了),然后尝试用Python 3.4恢复一些数据,它使用的逻辑稍有不同。如果这也完全失败了,那么这就意味着对你的文件的破坏太大了,你无法恢复任何东西。行号的确切错误消息是什么?如果知道错误源于哪一行,则可以编辑库代码。