2016-08-09 44 views
0

基本上,我的目标是最好的例子descriped:默认-brench Django的异常处理程序在try-except块

查看

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

听起来好像你正在围绕整段代码使用try块,而不是用它来捕获特定的错误。 – Sayse

+0

是的,确切地说。这是不好的做法吗? –

+0

我想这是基于意见的。我会这么说,因为你甚至问过这个问题的原因,你让代码不必要的冗长。而不是专注于预定流程的程序,你在屠杀它来强制它工作 – Sayse

回答

1

通过在finally块中使用return语句,可以有效地隐藏错误。通常,在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 

可以赶上与裸所有异常除外条款或通过捕获Exception,虽然这往往是不推荐的,因为它可以很容易隐藏调试问题所需的详细信息:

try: 
    do_something() 
except: 
    handle_exception() 

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

当视图函数抛出一个异常,Django会为你做这个,给你一个详细的错误页面,其中包含错误信息,追踪,当地变量等等。