handle_exception.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import logging
  2. from fastapi import Request
  3. from fastapi.exceptions import RequestValidationError
  4. from starlette.exceptions import HTTPException as StarletteHTTPException
  5. from app.exceptions.exception import AuthenticationError, AuthorizationError, BaseHTTPException
  6. from app.providers.response import ErrorResponse
  7. def register(app):
  8. @app.exception_handler(AuthenticationError)
  9. async def authentication_exception_handler(request: Request, e: AuthenticationError):
  10. """
  11. 认证异常处理
  12. """
  13. return ErrorResponse(e.status_code, e.error_code, e.message)
  14. @app.exception_handler(AuthorizationError)
  15. async def authorization_exception_handler(request: Request, e: AuthorizationError):
  16. """
  17. 权限异常处理
  18. """
  19. return ErrorResponse(e.status_code, e.error_code, e.message)
  20. @app.exception_handler(BaseHTTPException)
  21. async def business_exception_handler(request: Request, e: BaseHTTPException):
  22. """
  23. 其他业务异常
  24. """
  25. logging.exception(e)
  26. return ErrorResponse(e.status_code, e.error_code, e.message, e.type, e.param)
  27. @app.exception_handler(StarletteHTTPException)
  28. async def starlette_http_exception_handler(request: Request, e: StarletteHTTPException):
  29. logging.exception(e)
  30. return ErrorResponse(e.status_code, "http_error", e.detail)
  31. @app.exception_handler(RequestValidationError)
  32. async def validation_exception_handler(request: Request, e: RequestValidationError):
  33. logging.exception(e)
  34. return ErrorResponse(422, "request_validation_error", str(e))