62 lines
1.4 KiB
Python
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
|