2013-11-28 26 views
8

也許我沒有看到documentation中的東西。如何攔截燒瓶中的所有異常?

我想不只是處理一些HTTP錯誤,但所有的例外。原因 - 我想用我自己的定製邏輯記錄它們(聽起來像重新發明輪子,但我需要完全控制日誌記錄。我不想讓服務器在發生異常時跪下,但只是彈出特定請求。

這是我現在該怎麼發動瓶。這裏app.run啓動服務器。我怎麼能指示每當發生異常?

def main(): 
    args = parse_args() 
    app.config['PROPAGATE_EXCEPTIONS'] = True 
    flask_options = {'port' : args.port} 
    if args.host == 'public': 
     flask_options['host'] = '0.0.0.0' 
    app.run(**flask_options) 

if __name__ == '__main__': 
    _sys.exit(main()) 

回答

14

您應該使用errorhandler它來調用我的異常處理方法,請參閱文檔http://flask.pocoo.org/docs/patterns/errorpages/#error-handlershttp://flask.pocoo.org/docs/api/#flask.Flask.errorhandler。它允許你在調度程序中獲得所有異常,但不處理錯誤處理程序中的異常。樂所有異常:

@app.errorhandler(Exception) 
def all_exception_handler(error): 
    return 'Error', 500 

如何過我更喜歡明確的例外處理程序或使用該案件裝飾(類爲本次)。

+2

這不再適用於最近的版本。在0.12中,我再次收到HTML錯誤頁面。 – bwind

+0

@bwind任何想法你應該如何在0.12中實現類似的邏輯呢? –

+0

@TuukkaMustonen:是的,請在這裏查看我對不同問題的回答:http://stackoverflow.com/questions/29332056/global-error-handler-for-any-exception/41655397#41655397 – bwind