【问题标题】:psycopg2.Error isn't being caught in python try/except blockpsycopg2.Error 没有被 python try/except 块捕获
【发布时间】:2017-07-20 14:14:50
【问题描述】:

我正在开发一个使用 django 和 PostgreSQL 数据库的应用程序。该应用程序设计为在组织内使用,因此需要执行用户提供的 SQL 请求。为了处理格式错误的 SQL 请求的可能性,数据库调用被包装在一个 try/except 块中:

import psycopg2
...
def djangoView(request):
    ...
    try:
        result = DBModel.objects.raw(sqlQuery)
        return getJSONResponse(result) #Serializes result of query to JSON
    except psycopg2.Error:
        pass #Handle error (no db requests are made)

但是,当我使用格式错误的 SQL 向视图发出请求时,我收到了 500 内部服务器错误。堆栈跟踪显示 500 的原因是 ProgrammingError,它是 psycopg2.Error 的子类。但是,except 语句没有正确捕获它。

【问题讨论】:

    标签: python django postgresql


    【解决方案1】:

    Django 使用来自其django.db package 的异常包装所有数据库异常。

    捕获错误的正确方法是:

    import django.db
    ...
    except django.db.Error:
    

    如果要访问底层数据库异常:

    except django.db.Error as e:
        dbException = e.__cause__ #Subclass of psycopg2.Error
    

    【讨论】:

      猜你喜欢
      • 2020-05-09
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2019-06-26
      相关资源
      最近更新 更多