data_factory/utils/validation_error_utils.py

62 lines
1.4 KiB
Python

#!/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