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

Pydantic模型格式转换报错:解包值过多问题排查与解决

Pydantic root_validator 字符串转模型实例的报错修复

需求目标

  • 数据存储支持简化列表或详细字典/对象两种格式
  • 通过 model.Schema() 定义上述两种数据结构
  • 应用内部统一使用详细对象形式

问题场景

为 Hobbies 类实现 root_validator,用于将字符串格式的爱好条目转换为 Hobby 模型实例时,触发了 ValidationError: too many values to unpack (expected 2) 错误。

错误原因

  1. 未使用 enumerate 实现带索引的遍历,直接遍历字典导致解包失败
  2. 对 root_validator 的参数类型认知错误:它接收的是字典而非列表,原始列表数据实际存储在字典的 __root__ 键中

错误代码片段

@root_validator(pre=True)
def convert_string_to_dict(cls, values):
    for idx, value in values:
        if not isinstance(value, str):
            continue
        value = dict(zip(Hobby.__fields__, value.split("|", maxsplit=1)))
        values[idx] = value
    return values

修正后代码片段

@root_validator(pre=True)
def convert_string_to_dict(cls, values: dict):
    for idx, value in enumerate(values["__root__"]):
        if not isinstance(value, str):
            continue
        value = dict(zip(Hobby.__fields__, value.split("|", maxsplit=1)))
        values["__root__"][idx] = value
    return values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:10:34