Skip to content

Latest commit

 

History

History
153 lines (126 loc) · 3.34 KB

File metadata and controls

153 lines (126 loc) · 3.34 KB

异常处理模块

模块简介

异常处理模块提供了统一的异常处理机制,包括自定义异常类型、全局异常处理器、异常响应格式化等功能。通过统一的异常处理,提供一致的错误响应格式,便于客户端处理和问题排查。

核心功能

  1. 异常类型

    • 基础异常类
    • 业务异常类
    • 验证异常类
    • 权限异常类
    • 系统异常类
  2. 异常处理器

    • 全局异常处理器
    • 特定异常处理器
    • 自定义异常处理器
    • 异常响应格式化
  3. 异常监控

    • 异常日志记录
    • 异常统计分析
    • 异常告警通知
    • 异常追踪

使用方法

自定义异常

from core.exceptions import BaseException

class UserNotFoundException(BaseException):
    code = 404
    message = "用户不存在"
    error_code = "USER_NOT_FOUND"

class InvalidTokenException(BaseException):
    code = 401
    message = "无效的认证令牌"
    error_code = "INVALID_TOKEN"

# 使用自定义异常
def get_user(user_id: int):
    user = db.query(User).filter_by(id=user_id).first()
    if not user:
        raise UserNotFoundException()
    return user

异常处理器

from fastapi import FastAPI, Request
from core.exceptions import (
    BaseException,
    DatabaseException,
    ValidationException
)

app = FastAPI()

@app.exception_handler(BaseException)
async def base_exception_handler(request: Request, exc: BaseException):
    return JSONResponse(
        status_code=exc.code,
        content={
            "code": exc.error_code,
            "message": exc.message,
            "data": exc.data
        }
    )

@app.exception_handler(DatabaseException)
async def database_exception_handler(request: Request, exc: DatabaseException):
    # 数据库异常特殊处理
    logger.error(f"数据库错误: {exc}")
    return JSONResponse(
        status_code=500,
        content={
            "code": "DB_ERROR",
            "message": "数据库操作失败"
        }
    )

配置选项

EXCEPTION_CONFIG = {
    "handlers": {
        "default": {
            "response_model": {
                "code": str,
                "message": str,
                "data": dict
            },
            "logging": True
        }
    },
    "logging": {
        "level": "ERROR",
        "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    },
    "notification": {
        "enabled": True,
        "channels": ["email", "slack"],
        "threshold": "ERROR"
    }
}

最佳实践

  1. 异常分类

    • 按照业务域划分异常
    • 合理设置错误码
    • 提供清晰的错误信息
    • 区分系统异常和业务异常
  2. 异常处理

    • 统一的异常处理流程
    • 适当的异常转换
    • 合理的异常传播
    • 完整的异常信息记录
  3. 安全考虑

    • 避免暴露敏感信息
    • 控制异常堆栈信息
    • 防止异常信息泄露
    • 限制异常处理资源

注意事项

  1. 异常设计

    • 合理的异常继承体系
    • 明确的异常命名
    • 详细的异常描述
    • 适当的异常粒度
  2. 性能影响

    • 避免过多的异常捕获
    • 减少异常栈深度
    • 优化异常处理逻辑
    • 控制日志输出量
  3. 可维护性

    • 统一的异常文档
    • 清晰的错误码体系
    • 完整的异常测试
    • 便于问题定位