from typing import Any, Optional class S2FException(Exception): """ 财务 AI 助手基础异常类 Attributes: message: 错误消息 code: 错误代码 details: 错误详情 """ def __init__( self, message: str, code: str = "INTERNAL_ERROR", details: Optional[dict[str, Any]] = None, ) -> None: self.message = message self.code = code self.details = details or {} super().__init__(self.message) class NotFoundException(S2FException): """资源未找到异常""" def __init__(self, message: str = "资源未找到", details: Optional[dict[str, Any]] = None) -> None: super().__init__(message=message, code="NOT_FOUND", details=details) class UnauthorizedException(S2FException): """未授权异常""" def __init__(self, message: str = "未授权访问", details: Optional[dict[str, Any]] = None) -> None: super().__init__(message=message, code="UNAUTHORIZED", details=details) class ForbiddenException(S2FException): """禁止访问异常""" def __init__(self, message: str = "禁止访问", details: Optional[dict[str, Any]] = None) -> None: super().__init__(message=message, code="FORBIDDEN", details=details) class ValidationException(S2FException): """数据验证异常""" def __init__(self, message: str = "数据验证失败", details: Optional[dict[str, Any]] = None) -> None: super().__init__(message=message, code="VALIDATION_ERROR", details=details) class BusinessException(S2FException): """业务逻辑异常""" def __init__(self, message: str, code: str = "BUSINESS_ERROR", details: Optional[dict[str, Any]] = None) -> None: super().__init__(message=message, code=code, details=details) class ExternalServiceException(S2FException): """外部服务异常""" def __init__(self, message: str = "外部服务调用失败", details: Optional[dict[str, Any]] = None) -> None: super().__init__(message=message, code="EXTERNAL_SERVICE_ERROR", details=details)