2013-11-28 4 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-handlers и http://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

@wwind Любая идея, как вы должны реализовать аналогичную логику в 0.12? –

+0

@TuukkaMustonen: Да, см. Мой ответ на другой вопрос здесь: http://stackoverflow.com/questions/29332056/global-error-handler-for-any-exception/41655397#41655397 – bwind

Смежные вопросы