在 Flask 中处理(不捕获)异常的钩子
Hook for processing (not catching) exception in Flask
我有一个 Flask 服务器。
每当我的处理程序中的代码抛出异常时,Flask 都会捕获它,并且 returns 向客户端发送一个 HTML 页面并显示 5XX 错误。
问题是我没有注意到这一点。我刚收到一封使用我的 API 的人发来的电子邮件,说他们收到 504 错误,直到他们告诉我我才知道。
在我的应用程序的其他非 Flask 部分,我编写了一个自定义装饰器来捕获所有异常,向我发送电子邮件,然后重新抛出。我想要类似的东西用于我的 Flask 应用程序。
我想找到一种方法,让 Flask 在我的处理程序代码每次抛出异常时调用我的函数,然后再 returns 对客户端的响应。我不想修改发送给客户端的响应。我不想改变 Flask 处理错误的方式,或者它捕获错误的方式。我只是想要一些被通知的方式,然后 Flask 可以继续执行默认的错误处理行为。
我想我可以在每个路由处理程序上放置一个装饰器,以便在 Flask 看到异常之前捕获并重新抛出异常,但这很麻烦。我只知道我会忘记其中一个,尤其是当我以后添加新的时。
MWE
有问题的应用程序:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
assert False, "buggy code here"
return "hello"
def error_handler(exc_type, exc_val, exc_tb):
send_email(exc_type, exc_val, exc_tb)
# This is the part I don't know
# I want something along the lines of:
app.config['ERROR_HOOK'] = error_handler
from flask import Flask
app = Flask(__name__)
app.debug = False
app.config['PROPAGATE_EXCEPTIONS'] = True
@app.errorhandler(Exception)
def all_exception_handler(error):
print(str(error))
@app.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404
您可以 define a function 针对每个要捕获的特定错误 @app.my_custom_errorhandler(code_or_exception)
您的错误处理函数的参数将是一个 Exception
。
我有一个 Flask 服务器。
每当我的处理程序中的代码抛出异常时,Flask 都会捕获它,并且 returns 向客户端发送一个 HTML 页面并显示 5XX 错误。
问题是我没有注意到这一点。我刚收到一封使用我的 API 的人发来的电子邮件,说他们收到 504 错误,直到他们告诉我我才知道。
在我的应用程序的其他非 Flask 部分,我编写了一个自定义装饰器来捕获所有异常,向我发送电子邮件,然后重新抛出。我想要类似的东西用于我的 Flask 应用程序。
我想找到一种方法,让 Flask 在我的处理程序代码每次抛出异常时调用我的函数,然后再 returns 对客户端的响应。我不想修改发送给客户端的响应。我不想改变 Flask 处理错误的方式,或者它捕获错误的方式。我只是想要一些被通知的方式,然后 Flask 可以继续执行默认的错误处理行为。
我想我可以在每个路由处理程序上放置一个装饰器,以便在 Flask 看到异常之前捕获并重新抛出异常,但这很麻烦。我只知道我会忘记其中一个,尤其是当我以后添加新的时。
MWE
有问题的应用程序:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
assert False, "buggy code here"
return "hello"
def error_handler(exc_type, exc_val, exc_tb):
send_email(exc_type, exc_val, exc_tb)
# This is the part I don't know
# I want something along the lines of:
app.config['ERROR_HOOK'] = error_handler
from flask import Flask
app = Flask(__name__)
app.debug = False
app.config['PROPAGATE_EXCEPTIONS'] = True
@app.errorhandler(Exception)
def all_exception_handler(error):
print(str(error))
@app.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404
您可以 define a function 针对每个要捕获的特定错误 @app.my_custom_errorhandler(code_or_exception)
您的错误处理函数的参数将是一个 Exception
。