当抛出与IntegrityError相关的异常时,获取字段名称的最pythonic方法是什么?

时间:2017-05-05 09:55:51

标签: python django django-rest-framework

我正在使用DRF开发API,并且我想在抛出与IntegrityError相关的异常时生成并返回正确的自定义错误消息。

为此,我实现了一个自定义异常处理程序。在自定义异常处理程序中,我想从Exception实例获取导致错误的字段的名称,然后我将在响应中生成并返回正确的消息。

目前,我可以通过解析例外实例的消息属性来完成此操作,但我不确定这是否是最佳解决方案。

那么,当抛出与IntegrityError相关的异常时,是否有任何pythonic方法从Exception实例获取字段的名称?

谢谢!

2 个答案:

答案 0 :(得分:0)

根据source,似乎IntergityError只不过是一个例外,因此唯一的方法是解析exception.messageexception.args

您始终可以查看为您print(dir(exception))提供的内容,但我确信只有messageargs会有所帮助。

答案 1 :(得分:0)

恕我直言“解析消息”是完全pythonic:简单,可读,你可以在任何其他类似的情况下做同样/类似的解决方案。我之前见过这样的事情:

# in a custom Serializer's create() method
try:
    return super().create(validated_data)
except IntegrityError as e:
    raise APIException(detail=e.args[0].split('DETAIL:  ')[1])

很简单,它的工作原理以及以任何其他方式获取额外数据可能会涉及更复杂的事情。