You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Quart开发Python API返回HTTP错误时遇TypeError问题求助

问题:Quart API返回错误时出现TypeError(must be real number, not BadRequest)

场景复现

使用Quart构建Python API并通过Foreman运行,当尝试返回错误码时程序异常,返回一段HTML错误页面,核心提示为“must be real number, not bad request”。

接口代码

@app.route("/games/info/<int:game_id>", methods=["GET"])
async def display_game_info(game_id):
    db = await _get_db()
    try:
        data = await db.fetch_all(
            "SELECT * FROM GameStats where game_id = :game_id;",
            values={"game_id": game_id},
        )
    except sqlite3.IntegrityError as e:
        abort(409,e)
    if data == []:
        abort(400,{"error":"game not exist!"})
# 后续数据格式化与返回逻辑
# ……

错误现象

输入存在的游戏ID时接口返回正常结果;输入不存在的ID时,返回的HTML中包含以下错误信息:

<h1>TypeError <span>must be real number, not BadRequest</span></h1>

当前错误处理器代码

@app.errorhandler(400)
def bad_request(e):
    return {"error": str(e)}, 400

已排查确认:执行abort(400,{"error":"game not exist!"})之前的逻辑均正常。


解决方案

修改400错误处理器的返回逻辑:
将原代码:

return {"error": str(e)}, 400

替换为:

return {"error": e.description}, 400

原因说明

直接使用str(e)转换Werkzeug的异常对象时会触发类型错误,而e.description属性可以正确获取到调用abort时传入的错误描述内容。

内容的提问来源于stack exchange,提问作者Ming Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:01:47