Исключение HTTPException
Исключение HTTPException применяется внутри функций-обработчиков
FastAPI для досрочного прерывания обработки запроса и отправки
клиенту HTTP-ответа с ошибкой. Первым параметром передаётся код
состояния status_code, вторым - тело ответа detail,
третьим - словарь заголовков headers.
Когда FastAPI перехватывает это исключение, оно превращается
в JSON-ответ вида {"detail": "..."} с указанным кодом
состояния. Это удобный способ сообщить клиенту об ошибке
без ручного формирования ответа.
Синтаксис
from fastapi import HTTPException
raise HTTPException(status_code, detail, headers)
Пример
Давайте выбросим исключение, если запрошенный элемент не найден:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get('/items/{item_id}')
def get_item(item_id: int):
if item_id != 1:
raise HTTPException(status_code=404, detail='Item not found')
return {'item_id': item_id}
Результат выполнения кода для адреса /items/5:
{"detail": "Item not found"}
Пример
Давайте передадим собственные заголовки вместе с исключением:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get('/user/{name}')
def get_user(name: str):
if name != 'abcde':
raise HTTPException(
status_code=403,
detail='Access denied',
headers={'X-Error': 'Forbidden'}
)
return {'name': name}
Результат выполнения кода для адреса /user/user:
{"detail": "Access denied"}
Пример
Давайте используем исключение внутри зависимостей:
Результат выполнения кода для адреса /protected/?token=abcde:
{"token": "abcde"}
Смотрите также
-
атрибут
status_code,
который задаёт код состояния HTTP-ответа -
атрибут
detail,
который хранит тело ответа с описанием ошибки -
атрибут
headers,
который задаёт дополнительные заголовки ответа -
исключение
RequestValidationError,
которое возникает при ошибке валидации данных запроса