在python中使用Berkeley Db(bsddb)时出现死锁_WRAP错误

在python中使用Berkeley Db(bsddb)时出现死锁_WRAP错误,python,berkeley-db,bsddb,Python,Berkeley Db,Bsddb,我正在使用berkdb存储一个庞大的键值对列表,但由于某种原因,当我稍后尝试访问某些数据时,会出现以下错误: try: key = 'scrape011201-590652' contenttext = contentdict[key] except: print the error <type 'exceptions.KeyError'> 'scrape011201-590652' in contenttext = contentdict[key]\n

我正在使用berkdb存储一个庞大的键值对列表,但由于某种原因,当我稍后尝试访问某些数据时,会出现以下错误:

try:
    key = 'scrape011201-590652'
    contenttext = contentdict[key]
except:
    print the error


<type 'exceptions.KeyError'> 'scrape011201-590652' in 
contenttext = contentdict[key]\n', '  File "/usr/lib64/python2.5/bsddb/__init__.py",
line 223, in __getitem__\n    return _DeadlockWrap(lambda: self.db[key])  #   
self.db[key]\n', 'File "/usr/lib64/python2.5/bsddb/dbutils.py", line 62, in 
DeadlockWrap\n    return function(*_args, **_kwargs)\n', '  File 
"/usr/lib64/python2.5/bsddb/__init__.py", line 223, in <lambda>\n    return 
_DeadlockWrap(lambda: self.db[key])  # self.db[key]\n']

我使用多个数据集运行此操作,此错误只发生在其中一个数据集上,最大的一个数据集,而不是其他数据集。

我非常确定,
死锁包装的内容与此无关。这只是一个简单的方法。换句话说,如果数据库操作失败,它会稍等片刻,然后再试一次,最后失败

您似乎从字典
get
操作中获得了
keyrerror
,这很可能是因为您使用的密钥实际上不存在于数据库中

请使用以下内容尝试您的代码:

try:
    key = 'scrape011201-590652'
    if not contentdict.has_key(key):
        print "Urk!, No record for %s"%(key)
    contenttext = contentdict[key]
except:
    print the error

这将显示表中是否不存在记录(通过输出
Urk!
消息)。至于您在这种情况下要做什么,这取决于您的体系结构。您可能希望返回
None
或空字符串。您可能还想做您现在正在做的事情(引发一个异常)。

我非常确定
死锁包装
的内容与此无关。这只是一个简单的方法。换句话说,如果数据库操作失败,它会稍等片刻,然后再试一次,最后失败

您似乎从字典
get
操作中获得了
keyrerror
,这很可能是因为您使用的密钥实际上不存在于数据库中

请使用以下内容尝试您的代码:

try:
    key = 'scrape011201-590652'
    if not contentdict.has_key(key):
        print "Urk!, No record for %s"%(key)
    contenttext = contentdict[key]
except:
    print the error
这将显示表中是否不存在记录(通过输出
Urk!
消息)。至于您在这种情况下要做什么,这取决于您的体系结构。您可能希望返回
None
或空字符串。您可能还希望完全按照您现在所做的操作(引发异常)

contenttext = contentdict[key] if contentdict.has_key(key) else None