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

如何让Pydantic执行完整校验并返回全部校验错误?

让Pydantic返回所有校验错误的配置方法

Pydantic在v1版本默认会终止于首个校验错误,v2版本默认已支持收集所有错误,但都需要通过捕获异常来获取完整错误列表。以下分版本说明具体配置方式:

Pydantic v2

捕获ValidationError获取所有错误

实例化模型时若存在校验错误会抛出ValidationError,捕获该异常后可通过errors()方法获取所有错误的结构化信息:

from pydantic import BaseModel, ValidationError

class Salary(BaseModel):
    gross: int
    net: int
    tax: int

class Employee(BaseModel):
    name: str
    age: int
    salary: Salary

try:
    # 注意:原示例中Employee实例化参数应为小写salary,而非大写Salary
    employee = Employee(
        name="Mattia", 
        age="hello", 
        salary=Salary(gross="hello", net=1000, tax=10)
    )
except ValidationError as e:
    # 打印所有错误详情
    print(e.errors())
    # 或输出格式化的JSON
    print(e.json())

明确配置全量校验(可选)

v2默认已开启全量校验,若需确保行为一致,可通过model_config指定:

from pydantic import BaseModel, ConfigDict

class Salary(BaseModel):
    model_config = ConfigDict(validate_assignment=True)
    gross: int
    net: int
    tax: int

class Employee(BaseModel):
    model_config = ConfigDict(validate_assignment=True)
    name: str
    age: int
    salary: Salary

Pydantic v1

v1默认终止于首个错误,需通过validate_all=True开启全量校验:

单模型配置

在模型的Config类中添加validate_all=True:

from pydantic import BaseModel, ValidationError

class Salary(BaseModel):
    class Config:
        validate_all = True
    gross: int
    net: int
    tax: int

class Employee(BaseModel):
    class Config:
        validate_all = True
    name: str
    age: int
    salary: Salary

try:
    employee = Employee(
        name="Mattia", 
        age="hello", 
        salary=Salary(gross="hello", net=1000, tax=10)
    )
except ValidationError as e:
    print(e.json())

全局配置

若需所有模型默认开启全量校验,可通过全局设置:

from pydantic import BaseSettings

class GlobalSettings(BaseSettings):
    class Config:
        validate_all = True

# 所有继承BaseModel的模型会自动应用该配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:10:12