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

如何用Pydantic验证函数调用参数但不执行目标函数?

用Pydantic校验函数参数但不执行函数的解决方案

针对新版Pydantic中validate_call替代旧版validate_arguments后,无法通过vd属性提取校验逻辑的问题,提供两种可靠方案实现参数校验且不执行原函数:

方法一:基于函数参数生成Pydantic模型(推荐)

利用create_model_from_function根据目标函数的参数定义和类型提示生成对应的Pydantic模型,通过模型实例化完成参数校验,全程不会触发原函数执行。

from pydantic import create_model_from_function, ValidationError
from typing import Optional, List

# 待校验的参数和目标函数
kwargs = {'x': 1, 'y': 'hi'}
def foo(x: int, y: str, z: Optional[List] = None):
    pass

# 生成仅包含参数的校验模型(include_return=False 忽略返回值类型)
FooArgsModel = create_model_from_function(foo, include_return=False)

try:
    # 验证参数是否符合要求
    FooArgsModel(**kwargs)
    print("参数符合类型提示要求")
except ValidationError as e:
    print(f"参数校验失败:{e}")

方法二:用空函数模拟校验逻辑

创建一个空函数,复制原函数的参数签名后用validate_call装饰,调用该装饰后的空函数即可触发参数校验,不会执行原函数代码。

from pydantic import validate_call, ValidationError
from typing import Optional, List
import inspect

# 待校验的参数和目标函数
kwargs = {'x': 1, 'y': 'hi'}
def foo(x: int, y: str, z: Optional[List] = None):
    pass

# 定义空函数并替换签名为原函数的签名
def dummy_func(*args, **dummy_kwargs):
    pass
dummy_func.__signature__ = inspect.signature(foo)

# 装饰空函数以获得校验能力
validated_dummy = validate_call(dummy_func)

try:
    validated_dummy(**kwargs)
    print("参数校验通过")
except ValidationError as e:
    print(f"参数校验失败:{e}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:42:47