Python如何校验函数输入为元素是int/float的二维嵌套列表?
Python 严格校验指定嵌套列表格式的实现方法
针对需要校验的[[s1, e1], [s2, e2], ...]格式(所有端点为int/float类型),以下是两种可直接落地的方案:
方案1:原生Python实现(无第三方依赖)
不需要额外安装包,直接分层实现校验逻辑即可。注意Python中bool是int的子类,若不单独判断会将True/False误识别为合法数值,建议加上布尔值排除逻辑。
def validate_interval_format(input_val): # 校验最外层为列表 if not isinstance(input_val, list): raise TypeError(f"输入必须为列表类型,当前类型:{type(input_val)}") for item_idx, interval in enumerate(input_val): # 校验每个区间元素为列表 if not isinstance(interval, list): raise TypeError(f"第{item_idx}个区间必须为列表类型,当前类型:{type(interval)}") # 校验每个区间长度固定为2 if len(interval) != 2: raise ValueError(f"第{item_idx}个区间必须包含2个端点值,当前长度:{len(interval)}") # 校验端点为int/float,排除布尔值 for point_idx, point_val in enumerate(interval): if isinstance(point_val, bool) or not isinstance(point_val, (int, float)): raise TypeError(f"第{item_idx}个区间的第{point_idx}个端点必须为int/float类型,非法值:{point_val},类型:{type(point_val)}") return True
在函数入口直接调用即可,需要断言的话直接写:assert validate_interval_format(your_input_arg), "输入不符合[[s1,e1], [s2,e2]...]格式要求"
方案2:使用Pydantic校验(适合多校验规则场景)
如果项目中存在大量数据格式校验需求,不需要手写重复校验逻辑,可以用Pydantic定义数据模型自动完成严格校验,错误提示更清晰,也支持自定义扩展规则。
from typing import List, Union from pydantic import RootModel, conlist, ValidationError # 定义单个区间格式:固定长度2,元素为int/float class Interval(conlist(Union[int, float], min_length=2, max_length=2)): @classmethod def __get_pydantic_core_schema__(cls, source_type, handler): from pydantic_core import core_schema base_schema = handler(source_type) # 追加布尔值排除校验 def exclude_bool_validator(val, handler): if any(isinstance(v, bool) for v in val): raise TypeError("区间端点不能为布尔类型") return handler(val) return core_schema.no_info_wrap_validator_function(exclude_bool_validator, base_schema) # 定义整体输入格式 class IntervalListInput(RootModel[List[Interval]]): pass # 函数入口使用示例 def your_process_func(input_data): try: valid_data = IntervalListInput.model_validate(input_data).root except ValidationError as e: raise ValueError(f"输入格式不合法:{e}") from e # 后续业务逻辑直接使用校验通过的valid_data即可
注意:如果你的业务场景允许布尔值作为数值传入(不推荐,容易引发隐蔽计算bug),直接删除对应布尔值校验的代码段即可。
内容的提问来源于stack exchange,提问作者Tomoon
相关产品推荐
相关产品推荐

