【问题标题】:Any way to handler IntegrityError in django?在 django 中处理 IntegrityError 的任何方法?
【发布时间】:2019-06-19 03:32:37
【问题描述】:

在 django 中,异常 IntegrityError 可能由多种原因引起。

有时这个错误意味着一个独特的冲突。有时这可能是由某些外键检查引起的。

目前我们只能通过将异常转化为文本来知道根本原因:

(1062, "Duplicate entry '79d3dd88917a11e98d42f000ac192cee-not_created' for key 'fs_cluster_id_dir_e8164dce_uniq'")

但这对于程序识别是非常不友好的。代码有没有办法识别异常的根本原因?

例如,如果我知道这是由一个独特的冲突引起的,我可以告诉客户端这是因为一些资源已经存在而引起的。如果我知道这是由于外键不存在造成的,我可以告诉客户端这是由于某些父资源未创建造成的。

那么有什么好的方法可以通过代码来识别原因吗?

【问题讨论】:

  • 那个答案只告诉我如何缓存和转换成短信。我想知道通过代码识别错误类型(唯一冲突,外键不存在)的任何方式
  • 没有e.__cause__返回那个细节吗?

标签: django


【解决方案1】:

不知道好不好。

您需要确定代码中的确切原因吗?如果出于效率考虑,您希望避免每次都使用另一种处理方式,则可以编写代码:

try:
   # the simple way
except IntegrityError as simplefail:
   try:
      # the complicated way
   except IntegrityError as complexfail:
      # log this utter failure and re-raise one or other of the caught errors

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-06
    • 2022-11-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    相关资源
    最近更新 更多