DatabaseError中有哪些字段?(django/python)

0 投票
1 回答
588 浏览
提问于 2025-04-17 23:15

我遇到了一个错误 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']

如你所见,你可能会在 argsmessage 这些属性中找到一些有用的信息。要了解这些属性返回了什么,你应该用 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)期望接收一定数量的参数,并对这个元组的元素赋予特殊的含义,而其他的通常只用一个字符串来表示错误信息。

希望在这些属性中能找到一些值得注意的信息,你可以用来进行检查。

撰写回答