我收到错误DatabaseError: (1213, 'Deadlock found when trying to get lock; try restarting transaction')
,我想通过重新启动操作来处理它。
如何确保我只在特定的死锁错误时重新启动,i。即使用代码1213
,而不是任何数据库错误?
我找不到DatabaseError
例外对象中可用的字段。
答案 0 :(得分:1)
您可以使用内置的dir()
来查看对象的所有属性。
>>> from django.db.utils import DatabaseError
>>> dir(DatabaseError)
['__class__',
'__delattr__',
'__dict__',
'__doc__',
'__format__',
'__getattribute__',
'__getitem__',
'__getslice__',
'__hash__',
'__init__',
'__module__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__setstate__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__unicode__',
'__weakref__',
'args',
'message']
如您所见,您可能会在args或message属性中找到有用的东西。要调查这些属性返回的内容,您应该使用DatabaseError
捕获异常,打印出我们感兴趣的属性,然后调用python interactive debugger:
try:
# whatever code is raising your exception
except DatabaseError as e:
print e.args
print e.message
import pdb; pdb.set_trace()
# then look at the output to see if you can find something useful
要了解args
属性的来源,我们需要查看说出的BaseException
docs
args - 赋予异常构造函数的参数元组。一些 内置异常(如IOError)期望一定数量的 参数并为此元组的元素赋予特殊含义, 而其他人通常只用一个字符串来表示 错误消息
希望您可以检查其中一个属性中的某些内容。