检查Python中

时间:2015-10-21 08:32:14

标签: python django function exception-handling django-rest-framework

我在Django中有一个用于数据库连接的小函数,如下所示:

def db_connection(query_name):
    try:
        cursor = connection.cursor()
        cursor.execute(query_name)
        descr = cursor.description
        rows = cursor.fetchall()
        result = [dict(zip([column[0] for column in descr], row)) for row in rows]
        return result
    except Exception as e:
        return e 
    finally:
       cursor.close()

这个函数在我的函数视图中用于Django rest框架来执行SQL查询。一般语法如下:

@api_view(['GET'])
def foo_bar(request):
    ....
    ....
    ....
    query1 = "Select name from table"
    result = db_connection(query1)

    return Response(result, status=status.HTTP_200_OK)

但是,我需要的是根据我的db_connection函数的返回值更改Response元组中的状态值,即如果没有异常则返回200 OK,否则为500.如何检查返回值是否为0一个函数是个例外吗?

2 个答案:

答案 0 :(得分:2)

你明确地绕过了异常已经给你的所有好的控制流程。不要那样做。

如果您只想要返回500,那么根本不要捕获异常;只是让它冒泡,Django的异常处理中间件将捕获它并返回500响应。

在任何情况下,你都不应该捕获基本的Exception类;只抓住你实际可以处理的事情。当你捕获异常时,你应该实际处理它;退回它而不是提高它是没有用的。

答案 1 :(得分:2)

我会将foo_bar函数中的try catch块移到result = db_connection(query1)代码上,并从那里返回500状态,以及某种错误dict,其中包含一条消息,解释失败的原因。我这样说是因为我假设你正在制作一个REST API,它必须总是返回一个答案而不是崩溃正常的django方式。