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

Flask 项目里想统一捕获所有异常,文档里通常这样写:

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

开启后异常会传播到 Flask 的全局 handler,问题就解决了。

Notice: 正常情况下,这里会有一个基于utteranc.es的留言系统,如果看不到,可能要想想办法才能看到。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2012 - 2026 tiaobug.com All Rights Reserved.

鲁ICP备2024124237号-1