flask全局的@app.errorhandler(Exception)无法起效

正常情况下,在能查到的所有文档都会这样表达如何给falsk设置全局的Excepition拦截器。

1
2
3
@app.errorhandler(Exception)
def handle_exception(exc):
pass

但是无论如何,在我的项目中就是无法使用,后来看了一下报出的异常,是从flask_restx打出来的,总是返回internal server error。
于是怀疑是使用了flask_restx或者flask_restful的原因,是这个架构提前抓住了异常没有往上抛出,导致flask根本无法接到异常。
看了一flask_restx的源码,尤其是flask_restx.api.Api.handle_error方法,最后发现在一种判断条件是,flask_restx就会把异常给抛出去了。
于是发现,只需要加个配置就可以了。

1
app.config['PROPAGATE_EXCEPTIONS'] = True

这样问题就解决了。

Notice: 正常情况下,这里会有一个基于utteranc.es的留言系统,如果看不到,可能需要科学上网方式。