应统一设计可读、可定位、可扩展的错误响应机制,按必填缺失、类型不符、范围越界、格式非法、业务约束冲突分类定义自定义异常,携带字段名、原始值、预期规则和错误码,支持批量校验聚合反馈,并与框架集成实现协议透明。

参数校验失败时,不建议直接抛出原始异常(如 ValueError)或静默忽略,而应统一设计可读、可定位、可扩展的错误响应机制。
明确错误类型与分层捕获
将校验错误归为几类常见场景:必填缺失、类型不符、范围越界、格式非法、业务约束冲突。每类对应一个自定义异常子类(如 MissingFieldError、InvalidRangeError),便于上层按需捕获处理,也利于日志分类和监控告警。
携带上下文信息,避免“哑错误”
异常实例应包含:字段名(field)、原始值(value)、预期规则(expected)、错误码(code)。例如:
- 抛出:
InvalidFormatError(field="email", value="abc", expected="valid email regex") - 避免:
ValueError("email format invalid")—— 无法定位字段,难调试
支持批量校验与聚合反馈
对多字段校验,不遇到第一个错就中断,而是收集全部问题后统一返回。适合表单提交等场景。可用列表存储错误对象,最终封装为结构化响应(如 {"errors": [{"field": "age", "code": "out_of_range", ...}, ...]})。
立即学习“Python免费学习笔记(深入)”;
与框架集成,保持调用透明
在 FastAPI 中用 pydantic.BaseModel 自动校验并转为标准 422 Unprocessable Entity 响应;在 Flask 中可封装装饰器或中间件,拦截校验异常并转换为 JSON 错误体。关键点是:业务逻辑层不感知 HTTP 协议细节,只抛领域语义异常。










