Исключение ValidationException
Исключение ValidationException относится к семейству исключений
FastAPI, связанных с валидацией входящих данных. Оно наследуется от
RequestValidationError и возникает, когда данные запроса
(тело, query-параметры, заголовки, path-параметры) не проходят
проверку Pydantic-моделью или аннотациями типов.
Чаще всего это исключение используется вместе с обработчиком
exception_handler, чтобы перехватить стандартную ошибку
и вернуть клиенту собственный формат ответа.
Синтаксис
from fastapi.exceptions import ValidationException
raise ValidationException(errors)
Параметр errors содержит список ошибок валидации.
Каждый элемент - это словарь с полями loc, msg и type.
Пример
Давайте перехватим ошибку валидации и вернём собственный ответ:
from fastapi import FastAPI, Request
from fastapi.exceptions import ValidationException
from fastapi.responses import JSONResponse
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: int
@app.exception_handler(ValidationException)
async def validation_handler(request: Request, exc: ValidationException):
return JSONResponse(
status_code=422,
content={'errors': exc.errors()}
)
@app.post('/items/')
async def create_item(item: Item):
return item
Если отправить тело с неверным типом поля price,
обработчик вернёт список ошибок:
{"errors": [{"loc": ["body", "price"], "msg": "Input should be a valid integer", "type": "int_parsing"}]}
Пример
Давайте вызовем исключение вручную внутри обработчика:
Результат выполнения кода для адреса /check/?value=-1:
{"errors": [{"loc": ["query", "value"], "msg": "Value must be positive", "type": "value_error"}]}
Смотрите также
-
исключение
RequestValidationError,
базовый класс для ошибок валидации запроса -
метод
errors,
который возвращает список ошибок валидации -
исключение
HTTPException,
которое используется для возврата HTTP-ошибок -
исключение
WebSocketRequestValidationError,
которое возникает при ошибке валидации WebSocket-запроса