2016-08-09 45 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會爲你做這個,給你一個詳細的錯誤頁面,其中包含錯誤信息,追蹤,當地變量等等。