FastAPI搜索接口返回Unprocessable Entity错误及print无输出排查
问题排查与解决方案
问题1:Unprocessable Entity 错误
这个错误的核心是路由路径定义错误,导致FastAPI把search_diagnosis识别成了patient_id路径参数的值。
常见错误场景:
你可能把路由写成了这种形式:@app.get("/{patient_id}/search_diagnosis") def search_diagnosis(patient_id: int): # 逻辑代码当请求
/search_diagnosis时,FastAPI会将search_diagnosis匹配到{patient_id}这个动态路径参数上,但你定义patient_id为int类型,字符串无法转换,因此抛出类型验证错误。修复方案:
根据需求调整路由:- 如果
patient_id是查询参数(比如请求/search_diagnosis?patient_id=123),路由应改为:@app.get("/search_diagnosis") def search_diagnosis(patient_id: int): # 逻辑代码 - 如果
patient_id必须是路径参数,路由应把固定路径放在前面:@app.get("/search_diagnosis/{patient_id}") def search_diagnosis(patient_id: int): # 逻辑代码
同时注意路由定义的顺序,确保固定路径的路由(比如
/search_diagnosis)放在动态路径路由(比如/{patient_id})之前,避免被提前匹配。- 如果
问题2:print语句未在shell输出
这个问题大概率是请求根本没进入你的接口处理逻辑——因为第一个问题的类型验证错误会被FastAPI的请求拦截器提前捕获,直接返回错误响应,不会执行接口内部的代码(包括print语句)。
- 验证与修复步骤:
- 先解决第一个路由问题,确保请求能正确匹配到
/search_diagnosis接口。 - 如果修复后print仍不输出,检查以下几点:
- 确认启动FastAPI的终端窗口没有被关闭或后台运行(比如用了
nohup或类似命令)。 - 检查是否有全局异常处理器或依赖项在执行到print语句前就抛出了异常。
- 可以在路由函数的第一行添加
print("接口已触发"),快速验证请求是否进入逻辑。
- 确认启动FastAPI的终端窗口没有被关闭或后台运行(比如用了
- 先解决第一个路由问题,确保请求能正确匹配到
内容的提问来源于stack exchange,提问作者Ciasto piekarz
相关产品推荐
相关产品推荐

