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

Pydantic V2迁移:@field_validator()遇'unexpected keyword argument 'pre''错误

Pydantic V2 中 @field_validator 替代 @validator 时 pre 参数的解决方案

在Pydantic V2里,pre参数并没有被弃用,只是传递方式发生了变化——它不再直接作为@field_validator的关键字参数,而是通过mode参数来指定验证时机。

具体变化与写法

  • Pydantic V1中用pre=True表示在字段类型转换前执行验证
  • Pydantic V2中需替换为mode='before',该值对应原pre=True的行为

代码示例对比

Pydantic V1 写法

from pydantic import BaseModel, validator

class MyModel(BaseModel):
    value: int

    @validator('value', pre=True)
    def convert_to_string(cls, v):
        return str(v) if isinstance(v, int) else v

Pydantic V2 写法

from pydantic import BaseModel, field_validator

class MyModel(BaseModel):
    value: int

    @field_validator('value', mode='before')
    def convert_to_string(cls, v):
        return str(v) if isinstance(v, int) else v

补充说明

V2的mode参数还有其他可选值,对应不同验证时机:

  • mode='after':字段类型转换后执行验证(对应V1默认的pre=False)
  • mode='wrap':包裹默认验证逻辑,接收原始值和验证函数两个参数,可自定义是否调用默认验证

内容的提问来源于stack exchange,提问作者Daniel Long

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:32:01