FastAPI通过URL传递整数列表参数报错的问题求助
问题原因及解决方法
核心原因
- 接口路径不匹配:你的代码中定义的接口路径是
/process_integers_url/,但你访问的URL路径是/process_integers/,两者不一致,导致请求没有命中正确的处理函数,最终返回预设的错误信息。 - 列表参数解析配置缺失:即使路径正确,FastAPI对查询参数中的列表类型,需要显式用
Query类声明才能确保正确解析重复的参数键,否则可能出现numbers始终为None的情况。
解决步骤
步骤1:修正访问路径
将请求URL改为与代码中定义的路径一致:
http://localhost:8000/process_integers_url/?numbers=1&numbers=2&numbers=3
步骤2:优化参数定义
修改代码中的参数声明,使用Query类明确指定列表类型的查询参数,确保FastAPI能正确解析重复的numbers参数:
from fastapi import FastAPI, Query from typing import List app = FastAPI() @app.get("/process_integers_url/") async def process_integers_url(numbers: List[int] = Query(None)): if numbers is None: return {"error": "No numbers provided!"} result_sum = sum(numbers) result_product = 1 for num in numbers: result_product *= num return { "sum": result_sum, "product": result_product, }
额外优化建议
如果希望强制要求必须传递numbers参数,可以将参数默认值改为...,即numbers: List[int] = Query(...),这样当未传参数时,FastAPI会自动返回422验证错误,无需手动判断None值。
内容的提问来源于stack exchange,提问作者gensC94
相关产品推荐
相关产品推荐

