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

Pydantic V2自定义额外字段禁止的验证错误消息不生效问题排查求助

Pydantic V2自定义额外字段禁止的验证错误消息不生效问题排查求助

我用Pydantic V2定义了下面这个模型:

from pydantic import BaseModel, ConfigDict

class Data(BaseModel):
    valid: bool = False
    name: str | None = None
    model_config = ConfigDict(extra="forbid")

当我用model_validate验证带额外字段的数据时:

Data.model_validate({"valid": True, "name": "John", "age": 30})

会触发预期的验证错误,默认提示信息是Extra inputs are not permitted:

pydantic_core._pydantic_core.ValidationError: 1 validation error for Data
age
  Extra inputs are not permitted [type=extra_forbidden, input_value=30, input_type=int]
    For further information visit https://errors.pydantic.dev/2.10/v/extra_forbidden

我想把这个默认提示改成自定义的Unknown field.,于是重写了model_validate方法来定制错误消息,修改后的模型如下:

from pydantic import BaseModel, ConfigDict
from pydantic_core import InitErrorDetails, ValidationError

class Data(BaseModel):
    valid: bool = False
    name: str | None = None
    model_config = ConfigDict(extra="forbid")  # 禁止额外字段

    @classmethod
    def model_validate(cls, value):
        try:
            return super().model_validate(value)
        except ValidationError as e:
            modified_errors = []
            for error in e.errors():
                if error['type'] == 'extra_forbidden':
                    modified_errors.append(
                        InitErrorDetails(
                            type=error['type'],
                            loc=error['loc'],
                            input=error['input'],
                            ctx={"error": "Unknown field."}  # 尝试在ctx中设置自定义消息
                        )
                    )
                else:
                    modified_errors.append(error)

            raise ValidationError.from_exception_data(
                title="Validation failed",
                line_errors=modified_errors
            )

但运行同样的验证代码后,错误消息还是没有变成我想要的Unknown field.,请问我的这个验证器写法哪里出问题了?

备注:内容来源于stack exchange,提问作者Mehdi Ben Hamida

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:48:01