Pydantic模型格式转换报错:解包值过多问题排查与解决
Pydantic root_validator 字符串转模型实例的报错修复
需求目标
- 数据存储支持简化列表或详细字典/对象两种格式
- 通过
model.Schema()定义上述两种数据结构 - 应用内部统一使用详细对象形式
问题场景
为 Hobbies 类实现 root_validator,用于将字符串格式的爱好条目转换为 Hobby 模型实例时,触发了 ValidationError: too many values to unpack (expected 2) 错误。
错误原因
- 未使用
enumerate实现带索引的遍历,直接遍历字典导致解包失败 - 对
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
相关产品推荐
相关产品推荐

