Flask自定义errorhandler未被调用,触发abort(400)无响应问题咨询
问题原因
- 核心原因是自定义错误处理函数缺少必填的异常入参:Flask触发
errorhandler装饰的函数时,会自动将捕获到的异常实例作为第一个位置参数传入,你定义的handle_bad_request没有预留入参,调用时会触发参数数量不匹配的错误,无法正常执行,最终回退到Flask默认的错误处理逻辑。 - 若你的项目使用了Blueprint注册路由,还需确认错误处理是注册在全局Flask应用实例上,若要在蓝图维度生效需使用
@bp.app_errorhandler而非@bp.errorhandler,从你给出的代码片段看不存在该问题。
修复方案
只需给错误处理函数增加一个接收异常实例的参数即可,修改后代码如下:
@app.route("/terms", methods=["GET"]) def terms(): abort(400) return render_template("terms.html") # 新增异常参数e @app.errorhandler(Exception) def handle_bad_request(e): return render_template("error.html")
如果仅需要处理400类错误,不需要全局捕获所有异常,可以将装饰器改为@app.errorhandler(400),针对性更强,避免误捕获其他业务异常。
内容的提问来源于stack exchange,提问作者BiggieSmalls
相关产品推荐
相关产品推荐

