python type_error ai_generated true

值错误:路径参数 'id' 的值无效。期望整数,但得到 'abc'。

ValueError: Invalid value for path parameter 'id'. Expected int, got 'abc'

ID: python/starlette-route-param-type-error

其他格式: JSON · Markdown 中文 · English
80%修复率
85%置信度
0证据数
2024-07-19首次发现

版本兼容性

版本状态引入弃用备注
3.x active

根因分析

在 Starlette 路由中定义了路径参数类型为 int,但客户端传入了非数字字符串。

English

在 Starlette 路由中定义了路径参数类型为 int,但客户端传入了非数字字符串。

generic

解决方案

  1. 90% 成功率
    from starlette.routing import Route
    async def get_item(request):
        id = request.path_params['id']
        try:
            id = int(id)
        except ValueError:
            return JSONResponse({'error': 'invalid'}, status_code=400)
  2. 95% 成功率
    Route('/items/{id:int}', get_item)

无效尝试

常见但无效的做法:

  1. 60% 失败

    如果参数是 URL 路径的一部分,无法在客户端转换。

  2. 50% 失败

    改变了 API 设计,可能影响其他依赖该参数类型的代码。