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

使用Pydantic校验字段时,能否设置两种固定的列表长度?

实现列表长度只能为2或4的Pydantic校验

Pydantic的conlist无法直接指定仅允许2或4的长度,你可以通过以下方式实现需求:

方法1:自定义字段校验器(Pydantic v2+)

通过field_validator装饰器添加自定义校验逻辑,直接检查列表长度:

from pydantic import BaseModel, field_validator
from typing import List

class Match(BaseModel):
    player_ids: List[int]

    @field_validator('player_ids')
    def check_player_ids_length(cls, v):
        if len(v) not in {2, 4}:
            raise ValueError('player_ids 必须包含恰好2个或4个元素')
        return v

方法2:结合Annotated与后置校验器

如果希望将校验逻辑与类型注解绑定,可使用AfterValidator实现更紧凑的写法,同时校验逻辑可复用:

from pydantic import BaseModel, AfterValidator
from typing import List, Annotated

def validate_length(v: List[int]) -> List[int]:
    if len(v) not in {2, 4}:
        raise ValueError('必须包含恰好2个或4个元素')
    return v

class Match(BaseModel):
    player_ids: Annotated[List[int], AfterValidator(validate_length)]

针对Pydantic v1的兼容写法

若你仍在使用Pydantic v1,需改用validator装饰器:

from pydantic import BaseModel, validator
from typing import List

class Match(BaseModel):
    player_ids: List[int]

    @validator('player_ids')
    def check_player_ids_length(cls, v):
        if len(v) not in {2, 4}:
            raise ValueError('player_ids 必须包含恰好2个或4个元素')
        return v

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:50:02