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

Flask API请求出现Invalid Status Argument错误,寻求排查帮助

问题分析与解决

核心错误原因

你的代码报错TypeError: Invalid status argument,并非来自try块内的数据库查询操作,而是出在函数最后的return语句上。

Flask中,当你返回元组({'status': 200}, jsonify(restaurants))时,框架会默认将其解析为(响应内容, 状态码)的格式。但这里第二个元素是jsonify()返回的Response对象,第一个元素是字典,Flask会错误地尝试将字典作为状态码设置给Response——状态码必须是整数类型,因此触发类型错误。

为什么try块没捕获到异常?

try块仅包裹了数据库查询的代码,而错误发生在try块执行完成后、Flask处理返回值的阶段,不在try的捕获范围内,所以你的异常处理逻辑不会触发。

修复方案

1. 修正返回格式

将返回语句改为符合Flask规范的格式,以下几种方式都可行:

方式一:返回JSON响应+状态码

return jsonify({'status': 200, 'data': restaurants}), 200

方式二:直接返回序列化后的餐厅数据(默认200状态码)

return jsonify(restaurants)

方式三:用make_response包装

return make_response(jsonify({'status': 200, 'data': restaurants}), 200)

2. 额外处理MongoDB的ObjectId序列化

注意:restaurants_collection.find()返回的文档包含_id(ObjectId类型),jsonify无法直接序列化该类型,会导致新的报错。需要将ObjectId转为字符串:

try:
    restaurants = []
    for doc in restaurants_collection.find():
        # 将ObjectId转为字符串
        doc['_id'] = str(doc['_id'])
        restaurants.append(doc)
except Exception as e:
    return make_response({'message': f'something went wrong {e}'}, 400)

你也可以自定义Flask的JSON编码器,全局处理ObjectId序列化,避免每次查询都手动转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:05:25