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

FastAPI路由函数用*args触发TypeError的原因及解决方法

错误原因与解决方法

错误原因

当你给函数添加@router.get("/greet")路由装饰器后,FastAPI(或同类ASGI框架)调用路由处理函数时,会以关键字参数的形式传递请求相关参数,而非位置参数。你的greet(*args)仅定义了接收位置参数的*args,无法匹配框架传递的关键字参数(框架尝试传递args这类关键字参数时,函数没有对应参数定义),因此抛出TypeError: greet() got an unexpected keyword argument 'args'错误。

另外,HTTP GET请求的参数本身是键值对形式的查询参数,并非位置参数,直接用*args也无法正确获取这些请求参数。

解决方法

根据需求,有两种常见处理方式:

  • 接收多个同名查询参数
    如果需要接收多个同名的用户名称(比如请求/greet?name=Aron&name=Claus),可以用List[str]类型结合Query定义参数,FastAPI会自动将多个同名查询参数收集为列表:
from fastapi import APIRouter, Query
from typing import List

router = APIRouter()

@router.get("/greet")
def greet(name: List[str] = Query(...)):
    return {"greetings to users:": name}
  • 接收任意多个不同名查询参数
    如果需要接收任意不同的查询参数,可以通过request对象直接获取,或者用**kwargs接收:
from fastapi import APIRouter, Request

router = APIRouter()

# 方式1:通过request对象获取所有查询参数
@router.get("/greet")
def greet(request: Request):
    params = dict(request.query_params)
    return {"received params": params}

# 方式2:用**kwargs接收(若需完全任意参数,更推荐用request方式)
@router.get("/greet")
def greet(**kwargs):
    return {"greetings to users:": list(kwargs.values())}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:10:32