2013-12-16 5 views
5

У меня есть модуль errors.py, чтобы отображать ошибки в шаблонах. Я хотел, чтобы добавить обработчик по умолчанию ошибки и наткнулись: http://flask.pocoo.org/mailinglist/archive/2012/7/12/default-error-handler/#cbeb8809dc0da7133f14b99e16f31d6bОбработчик ошибок по умолчанию для флаков, не вызываемый

Я использую 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 в одно из моих сопоставлений URL-адресов и перейду к нему.

Конечно, если у вас есть сопоставление ошибок 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

Для меня это нормально работает, 'flask == 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

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