如何在TypedDict运行时检查中捕获多余键?
解决TypedDict运行时验证无法检测多余键的问题
原代码使用Pydantic的TypeAdapter验证TypedDict时,即便开启strict=True也无法检测到多余字段,这是因为Pydantic默认允许TypedDict存在额外键。要实现多余键抛出异常的效果,需要在TypeAdapter的配置中明确禁止额外字段。
修改后的代码如下:
from typing import Any, TypeVar from pydantic import TypeAdapter, ConfigDict from typing_extensions import TypedDict T = TypeVar('T') def runtime_check_typed_dict(TypedDictClass: type[T], object_: Any) -> T: # 添加配置,禁止额外字段 config = ConfigDict(extra='forbid') TypedDictValidator = TypeAdapter(TypedDictClass, config=config) return TypedDictValidator.validate_python(object_, strict=True) class MyThing(TypedDict): key: str obj_: Any = {'key': 'stuff', 'extra': 'this should throw!'} runtime_check_typed_dict(MyThing, obj_)
关键修改说明
- 导入
pydantic的ConfigDict类,用于配置验证规则 - 创建
config对象并设置extra='forbid',表示严格禁止输入中存在TypedDict未定义的字段 - 实例化
TypeAdapter时传入该配置,结合strict=True即可实现严格的字段校验
运行修改后的代码,当输入包含多余键时,会抛出pydantic_core._pydantic_core.ValidationError异常,提示存在额外字段。
内容的提问来源于stack exchange,提问作者Garrett
相关产品推荐
相关产品推荐

