#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2025/3/15 21:25 # @Author : AngesZhu # @File : validation_error_utils.py # @Desc : 自定义异常类 from typing import Any, Dict, Optional from contextlib import contextmanager # 自定义异常类 class ValidationError(Exception): """字段校验异常基类""" def __init__(self, message: str, field: Optional[str] = None, details: Optional[Dict[str, Any]] = None): self.message = message self.field = field self.details = details or {} super().__init__(f"{message} (Field: {field}, Details: {details})") class RequiredFieldError(ValidationError): """必填字段异常""" pass class UniqueFieldError(ValidationError): """字段唯一性异常""" pass class EmptyFieldError(ValidationError): """字段为空异常""" pass class NegativeValueError(ValidationError): """负值异常""" pass class FieldMatchError(ValidationError): """字段匹配异常""" pass class FixedValueError(ValidationError): """固定值异常""" pass # 上下文管理器:统一处理异常 @contextmanager def handle_validation_errors(field: str, context: Optional[Dict[str, Any]] = None): """处理校验异常的上下文管理器""" try: yield except ValidationError: raise except Exception as e: raise ValidationError(f"意外的校验错误: {str(e)}", field, context) from e