使用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
相关产品推荐
相关产品推荐

