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

时间:2014-03-21 08:32:44

标签: python django

我收到错误DatabaseError: (1213, 'Deadlock found when trying to get lock; try restarting transaction'),我想通过重新启动操作来处理它。

如何确保我只在特定的死锁错误时重新启动,i。即使用代码1213,而不是任何数据库错误?

我找不到DatabaseError例外对象中可用的字段。

1 个答案:

答案 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)期望一定数量的   参数并为此元组的元素赋予特殊含义,   而其他人通常只用一个字符串来表示   错误消息

希望您可以检查其中一个属性中的某些内容。