我想为我的Flask应用程序实现一个异常处理程序,该处理程序在引发Exception时显示自定义错误页面.我可以轻松地使用它
@application.errorhandler(Exception)
def http_error_handler(error):
return flask.render_template('error.html', error=error), 500
但这具有在调试器(Werkzeug调试器或我的IDE的调试器)上捕获所有异常之前捕获所有异常的副作用,从而有效地禁用了调试.
如何实现仍允许调试异常和错误的自定义异常处理程序?在调试模式下,是否可以禁用我的自定义处理程序?
解决方法:
当未捕获的异常传播时,Werkzeug将生成500个异常.为500创建错误处理程序,而不是为Exception创建错误处理程序.启用调试后,将绕过500处理程序.
@app.errorhandler(500)
def handle_internal_error(e):
return render_template('500.html', error=e), 500
以下是一个完整的应用程序,演示了错误处理程序可用于断言,引发和中止.
from flask import Flask, abort
app = Flask(__name__)
@app.errorhandler(500)
def handle_internal_error(e):
return 'got an error', 500
@app.route('/assert')
def from_assert():
assert False
@app.route('/raise')
def from_raise():
raise Exception()
@app.route('/abort')
def from_abort():
abort(500)
app.run()
转到所有三个URL(/ assert,/ raise和/ abort)将显示消息“获取错误”.使用app.run(debug = True)运行只会显示/ abort消息,因为这是“预期”响应;其他两个网址将显示调试器.