我有一个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()
。
答案 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
不会发生的事情。