DatabaseError中有哪些字段?(django/python)
我遇到了一个错误 DatabaseError: (1213, '在尝试获取锁时发现死锁;请尝试重新启动事务')
,我想通过重新启动操作来处理这个错误。
我该如何确保只有在出现特定的死锁错误时才重新启动,也就是说,只有当错误代码是 1213
时,而不是其他任何数据库错误?
我找不到 DatabaseError
异常对象中有哪些可用的字段。
1 个回答
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 交互式调试器:
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
的 文档,里面提到:
args - 传递给异常构造函数的参数元组。一些内置的异常(比如 IOError)期望接收一定数量的参数,并对这个元组的元素赋予特殊的含义,而其他的通常只用一个字符串来表示错误信息。
希望在这些属性中能找到一些值得注意的信息,你可以用来进行检查。