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

如何在Pydantic中校验传入字典的必填键 缺失时自动丢弃无效数据

解决方案

Pydantic 本身默认就会对所有无默认值的必填字段做全层级存在性校验,不管是顶层字段还是嵌套模型、列表内的嵌套模型,只要缺少任意必填字段,实例化时都会抛出ValidationError异常。你只要捕获该异常即可判定整条数据无效、直接丢弃。

以下是完整可运行的实现代码:

from typing import List
from pydantic import BaseModel, ValidationError

# 注:原示例中mail类名建议改为大写开头符合Python PEP8命名规范,不影响功能
class Mail(BaseModel):
    mailid: int
    email: str
    
class User(BaseModel):
    id: int
    name: str
    mails: List[Mail]

def validate_user_data(data: dict) -> bool | User:
    try:
        # 校验通过返回实例对象
        return User(**data)
    except ValidationError:
        # 校验不通过返回False,代表整条数据丢弃
        return False

# 测试数据1
data1 = {
    'id': 123,
    'name': 'Jane Doe',
    'mails':[
        {'mailid':1,'email':'aeajhs@gmail.com'}, 
        {'mailid':2,'email':'aeajhsds@gmail.com'}
    ]
}
result1 = validate_user_data(data1)
print(result1) # 输出User实例,校验通过

# 测试数据2
data2 = {
        'id': 123,
        'name': 'Jane Doe',
        'mails':[
            {'mailid':1,'email':'aeajhs@gmail.com'}, 
            {'email':'aeajhsds@gmail.com'}
        ]
    }
result2 = validate_user_data(data2)
print(result2) # 输出False,校验不通过,整条数据丢弃

补充说明:如果你使用的是Pydantic V2版本,上述逻辑完全兼容不需要修改。如果部分字段设置了默认值但你仍强制要求请求方传入,给对应字段加上Field(..., required=True)配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:30:00