try-except块中default-brench的Django异常处理程序

时间:2016-08-09 15:00:04

标签: django

基本上,我的目标最好用例子来描述:

查看

define test_view()
   try
        # some code block
   except error_type_1:
        status = 428
        # do something
   except error_type_2:
        # do something else
   except # any other mistake
        # print the error to console
   finally 
        return smth

我的问题是,python中是否存在任何默认块 - 除了如果知道视图中存在异常,我可以获取Django打印到控制台的自定义错误消息?据我所知,else阻止不适用于此。这个问题背后的基本原理是,在我用try-except块包围我的代码之后,很难理解在错误上升不是我预期的结果的情况下代码中发生了什么。

1 个答案:

答案 0 :(得分:1)

通过在return块中使用finally语句,您可以有效地隐藏错误。通常,在finally块之后会重新启动任何未捕获的异常,但return语句会在此之前返回该函数的控制权。最好将return语句移出finally块,让意外错误自然传播:

def test_view():
    try
        # some code block
    except error_type_1:
        status = 428
        # do something
    except error_type_2:
        # do something else

    return smth

您可以使用bare except子句或捕获Exception来捕获所有异常,但通常不建议这样做,因为它可以轻松隐藏调试问题所需的详细信息:

try:
    do_something()
except:
    handle_exception()

try:
    do_something()
except Exception as exc:
    handle_exception(exc)

当视图函数引发异常时,Django会为您执行此操作并为您提供详细的错误页面,其中包括错误消息,回溯,局部变量等。