如何调试具有自定义异常处理程序的 Flask 应用程序?
How can I debug a Flask application that has a custom exception handler?
我想为我的 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)将显示消息 "got an error"。 运行 app.run(debug=True)
只会显示 /abort 的消息,因为那是一个 "expected" 响应;其他两个网址将显示调试器。
我想为我的 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)将显示消息 "got an error"。 运行 app.run(debug=True)
只会显示 /abort 的消息,因为那是一个 "expected" 响应;其他两个网址将显示调试器。