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

Исключение RequestValidationError

Исключение RequestValidationError вызывается автоматически, когда FastAPI не может привести тело запроса, параметры пути или query-параметры к объявленной схеме. Оно наследуется от ValidationException и содержит список ошибок валидации, доступный через метод errors. Чаще всего исключение обрабатывается вручную через exception_handler, чтобы вернуть клиенту понятный ответ.

Синтаксис

from fastapi.exceptions import RequestValidationError

Пример

Давайте объявим модель и маршрут, который принимает её в теле запроса:

from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class User(BaseModel): name: str age: int @app.post('/user') def create_user(user: User): return {'name': user.name, 'age': user.age}

Если отправить корректные данные, ошибки не возникнет:

{"name": "abcde", "age": 25}

Пример

Давайте отправим в поле age строку вместо числа. FastAPI выбросит исключение RequestValidationError и по умолчанию вернёт статус 422:

{ "detail": [ { "type": "int_parsing", "loc": ["body", "age"], "msg": "Input should be a valid integer", "input": "abcde" } ] }

Пример

Давайте перехватим исключение через exception_handler и вернём собственный ответ:

from fastapi import FastAPI, Request from fastapi.responses import JSONResponse from fastapi.exceptions import RequestValidationError from pydantic import BaseModel app = FastAPI() class User(BaseModel): name: str age: int @app.exception_handler(RequestValidationError) def validation_handler(request: Request, exc: RequestValidationError): return JSONResponse( status_code=400, content={'error': 'invalid data', 'details': exc.errors()} ) @app.post('/user') def create_user(user: User): return {'name': user.name, 'age': user.age}

Теперь при некорректных данных клиент получит статус 400 и список ошибок:

{ "error": "invalid data", "details": [ { "type": "int_parsing", "loc": ["body", "age"], "msg": "Input should be a valid integer", "input": "abcde" } ] }

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

  • метод errors,
    который возвращает список ошибок валидации
  • исключение ValidationException,
    которое является базовым для ошибок валидации
  • исключение WebSocketRequestValidationError,
    которое возникает при валидации WebSocket-запросов
  • исключение HTTPException,
    которое позволяет вернуть произвольный HTTP-ответ
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить