功能细节优化
This commit is contained in:
73
backend/exceptions.py
Normal file
73
backend/exceptions.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from fastapi import Request, status
|
||||
from fastapi.responses import JSONResponse
|
||||
from fastapi.exceptions import RequestValidationError
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
import traceback
|
||||
|
||||
class BusinessException(Exception):
|
||||
"""业务异常基类"""
|
||||
def __init__(self, message: str, code: int = 400):
|
||||
self.message = message
|
||||
self.code = code
|
||||
super().__init__(self.message)
|
||||
|
||||
class DataSourceException(BusinessException):
|
||||
"""数据源异常(AkShare等)"""
|
||||
def __init__(self, message: str = "数据源异常,请稍后重试"):
|
||||
super().__init__(message, code=503)
|
||||
|
||||
class AuthException(BusinessException):
|
||||
"""认证异常"""
|
||||
def __init__(self, message: str = "认证失败"):
|
||||
super().__init__(message, code=401)
|
||||
|
||||
class PermissionException(BusinessException):
|
||||
"""权限异常"""
|
||||
def __init__(self, message: str = "权限不足"):
|
||||
super().__init__(message, code=403)
|
||||
|
||||
async def business_exception_handler(request: Request, exc: BusinessException):
|
||||
"""业务异常处理器"""
|
||||
return JSONResponse(
|
||||
status_code=exc.code,
|
||||
content={
|
||||
"success": False,
|
||||
"error": exc.message,
|
||||
"code": exc.code
|
||||
}
|
||||
)
|
||||
|
||||
async def validation_exception_handler(request: Request, exc: RequestValidationError):
|
||||
"""请求参数验证异常处理器"""
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
content={
|
||||
"success": False,
|
||||
"error": "请求参数错误",
|
||||
"detail": exc.errors()
|
||||
}
|
||||
)
|
||||
|
||||
async def sqlalchemy_exception_handler(request: Request, exc: SQLAlchemyError):
|
||||
"""数据库异常处理器"""
|
||||
print(f"数据库错误: {exc}")
|
||||
traceback.print_exc()
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
content={
|
||||
"success": False,
|
||||
"error": "数据库操作失败"
|
||||
}
|
||||
)
|
||||
|
||||
async def general_exception_handler(request: Request, exc: Exception):
|
||||
"""通用异常处理器"""
|
||||
print(f"未捕获异常: {type(exc).__name__}: {exc}")
|
||||
traceback.print_exc()
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
content={
|
||||
"success": False,
|
||||
"error": "服务器内部错误"
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user