关于python:如何调试具有自定义异常处理程序的Flask应用程序?

How can I debug a Flask application that has a custom exception handler?

我想为我的Flask应用程序实现一个异常处理程序,当抛出Exception时,该处理程序显示一个自定义错误页面。我可以使用

轻松进行此操作

1
2
3
@application.errorhandler(Exception)
def http_error_handler(error):
    return flask.render_template('error.html', error=error), 500

但是这样做的副作用是捕获所有异常,然后再将它们击中调试器(Werkzeug调试器或我的IDE的),从而有效地禁用了调试。

如何实现仍允许调试异常和错误的自定义异常处理程序?在调试模式下是否可以禁用我的自定义处理程序?


当未捕获的异常传播时,Werkzeug将生成500个异常。为500创建错误处理程序,而不为Exception创建错误处理程序。启用调试后,将绕过500处理程序。

1
2
3
@app.errorhandler(500)
def handle_internal_error(e):
    return render_template('500.html', error=e), 500

以下是一个完整的应用程序,演示了错误处理程序可用于断言,引发和中止。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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的消息,因为这是一个" expected "响应;其他两个URL将显示调试器。