РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
14 of 307 menu

Метод exception_handler

Метод exception_handler применяется к приложению FastAPI и регистрирует функцию-обработчик для указанного класса исключения. Первым параметром передаётся класс исключения exc_class, который требуется перехватить. Метод работает как декоратор: возвращает декоратор, оборачивающий функцию-обработчик. Функция-обработчик принимает объект запроса request и объект исключения exc, а возвращает объект ответа Response.

FastAPI использует зарегистрированные обработчики для перехвата исключений, возникающих при обработке запросов. Если для исключения не найден обработчик, применяется обработчик по умолчанию. Метод exception_handler позволяет задать собственное поведение при ошибках.

Синтаксис

@app.exception_handler(exc_class)

Пример

Давайте зарегистрируем обработчик для встроенного исключения ValueError и вернём собственный JSON-ответ:

from fastapi import FastAPI from fastapi.responses import JSONResponse app = FastAPI() @app.exception_handler(ValueError) async def value_error_handler(request, exc): return JSONResponse( status_code=400, content={'message': 'value error'}, ) @app.get('/user') def get_user(): raise ValueError('bad value')

Результат выполнения кода для адреса /user:

{"message": "value error"}

Пример

Давайте создадим собственный класс исключения и зарегистрируем для него обработчик:

from fastapi import FastAPI from fastapi.responses import JSONResponse app = FastAPI() class UserNotFound(Exception): pass @app.exception_handler(UserNotFound) async def user_not_found_handler(request, exc): return JSONResponse( status_code=404, content={'message': 'user not found'}, ) @app.get('/user') def get_user(): raise UserNotFound()

Результат выполнения кода для адреса /user:

{"message": "user not found"}

Пример

Давайте перехватим исключение RequestValidationError и вернём ошибку в собственном формате:

from fastapi import FastAPI from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse app = FastAPI() @app.exception_handler(RequestValidationError) async def validation_handler(request, exc): return JSONResponse( status_code=422, content={'message': 'validation error'}, ) @app.get('/user') def get_user(age: int): return {'age': age}

Результат выполнения кода для адреса /user?age=abcde:

{"message": "validation error"}

Смотрите также

  • метод add_exception_handler,
    который регистрирует обработчик исключения без декоратора
  • метод middleware,
    который добавляет промежуточное ПО в приложение
  • класс FastAPI,
    который представляет приложение FastAPI
  • метод api_route,
    который вешает обработчик на произвольный HTTP-метод
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить