Flask默认错误处理程序未被调用

时间:2013-12-16 05:53:25

标签: python error-handling flask

我有一个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()

3 个答案:

答案 0 :(得分:6)

你可以这样做:

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

答案 1 :(得分:1)

检查render_template('defaultError.html')e.code是否引发任何异常。例如,我不确定您的任何例外是否都有code属性,请尝试非常简单的示例:

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

答案 2 :(得分:1)

看起来404实际上并没有在烧瓶代码中引发异常,因此默认处理程序没有任何理由被命中。如果我将raise Exception添加到我的某个网址映射并导航到该网址,我就可以点击它。

当然,如果你有一个500错误映射,异常将变成服务器端错误,因此它将落入该流域,所以我没有看到此时使用异常捕获(我可以不会想到它会捕获500 errorhandler不会发生的事情。