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

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类型,字符串无法转换,因此抛出类型验证错误。

  • 修复方案:
    根据需求调整路由:

    1. 如果patient_id是查询参数(比如请求/search_diagnosis?patient_id=123),路由应改为:
      @app.get("/search_diagnosis")
      def search_diagnosis(patient_id: int):
          # 逻辑代码
      
    2. 如果patient_id必须是路径参数,路由应把固定路径放在前面:
      @app.get("/search_diagnosis/{patient_id}")
      def search_diagnosis(patient_id: int):
          # 逻辑代码
      

    同时注意路由定义的顺序,确保固定路径的路由(比如/search_diagnosis)放在动态路径路由(比如/{patient_id})之前,避免被提前匹配。

问题2:print语句未在shell输出

这个问题大概率是请求根本没进入你的接口处理逻辑——因为第一个问题的类型验证错误会被FastAPI的请求拦截器提前捕获,直接返回错误响应,不会执行接口内部的代码(包括print语句)。

  • 验证与修复步骤:
    1. 先解决第一个路由问题,确保请求能正确匹配到/search_diagnosis接口。
    2. 如果修复后print仍不输出,检查以下几点:
      • 确认启动FastAPI的终端窗口没有被关闭或后台运行(比如用了nohup或类似命令)。
      • 检查是否有全局异常处理器或依赖项在执行到print语句前就抛出了异常。
      • 可以在路由函数的第一行添加print("接口已触发"),快速验证请求是否进入逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:37:05