2013-12-16 42 views
5

我有一個errors.py模塊將錯誤映射到模板。我是想添加一個默認的錯誤處理程序,並遇到了:http://flask.pocoo.org/mailinglist/archive/2012/7/12/default-error-handler/#cbeb8809dc0da7133f14b99e16f31d6bFlask默認錯誤處理程序不被調用

我使用Blueprint模塊化的東西,錯誤模塊具有以下映射:

@err.app_errorhandler(403) 
def forbidden(e): 
    return render_template('403.html'), 403 

@err.app_errorhandler(500) 
def serverError(e): 
    return render_template('500.html'), 500 

@err.app_errorhandler(Exception) 
def defaultHandler(e): 
    return render_template('defaultError.html'), e.code 

具體映射(403,500)如果我放棄他們(或自然誘導他們),但如果我放棄其他任何東西(404等),則不會調用defaulHandler()

回答

1

看來,404實際上並沒有引發異常的燒瓶代碼,這樣的默認處理程序沒有按」沒有任何理由被打。如果我將raise Exception添加到我的某個網址映射中並導航到該映射,我可以使它受到影響。

當然,如果你有一個500錯誤映射,這個異常會變成服務器端錯誤,因此它會落入該流域,所以我沒有看到在這一點上使用異常捕獲(I不能想到任何情況下,它會發現一個500 errorhandler不會)。

0

檢查render_template('defaultError.html')e.code是否引發異常。比如我不知道,任何你可以例外有code屬性,嘗試很簡單的例子:

@err.app_errorhandler(Exception) 
def defaultHandler(e): 
    return 'error handler there', 500 
+0

沒有例外被提出,我可以識別(使用燒瓶內置的服務器上運行)。無論如何,我會認爲我的500張地圖會遭到襲擊。 – bqui56

+0

對我來說,它工作正常,'瓶== 0.10.1'和​​'wergzeug = 0.9.4'。關於用戶例外看看爲什麼你的代碼不在那裏處理https://github.com/mitsuhiko/flask/blob/master/flask/app.py#L1475。 – tbicr

2

你可以做到這一點是這樣的:

app.config['TRAP_HTTP_EXCEPTIONS']=True 
app.register_error_handler(Exception, defaultHandler) 
+0

這工作,謝謝:) – mucio

相關問題