Как заставить все исключения проходить через промежуточное программное обеспечение FastAPI?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как заставить все исключения проходить через промежуточное программное обеспечение FastAPI?

Сообщение Anonymous »

Я пишу приложение, используя библиотеку Python fastapi. Части моего кода вызывают различные исключения, которые мне нужно обработать. Я хочу, чтобы вся эта обработка выполнялась в одном месте (с разными блоками исключений в зависимости от того, какое исключение было создано). Я попытался сделать это, добавив в свое приложение FastAPI следующее (упрощенное) промежуточное программное обеспечение:

Код: Выделить всё

from fastapi import APIRouter, FastAPI, Request, HTTPException, Response, status
from starlette.middleware.base import BaseHTTPMiddleware
from fastapi.responses import JSONResponse

class ExceptionHandlerMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
try:
return await call_next(request)
except HTTPException as e:
return JSONResponse(status_code=e.status_code, content={'message': e.detail})
except Exception as e:
return JSONResponse(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, content={'message': str(e)})

# app creation and config go here....

app.add_middleware(ExceptionHandlerMiddleware)
Проблема в том, что это не работает для некоторых конкретных исключений, которые fastapi обрабатывает по умолчанию (например, если возникает HTTPException, оно никогда не достигнет блока исключений в моем промежуточное программное обеспечение, поскольку оно уже будет обработано по умолчанию до достижения промежуточного программного обеспечения)
Документация Fastapi дает возможность переопределить поведение по умолчанию для определенных исключений, но это утомительно и не масштабируемо. Есть ли способ глобально заставить всю обработку исключений проходить через мое промежуточное программное обеспечение? (бонусные баллы, если кто-нибудь знает способ сделать это без использования декораторов, поскольку у меня есть одно требование — не использовать их)
ОБНОВЛЕНИЕ: Изначально мой вопрос был закрыт как дубликат этого вопроса, однако это НЕ одно и то же. Этот вопрос касается перехвата необработанных исключений, и в моем вопросе я имею дело с принуждением обработки исключений, которые обрабатываются по умолчанию (например, HTTPException), в другом месте кода, который я контролирую (как указано в моем вопросе, пытаясь перехватить HTTPException в промежуточном программном обеспечении не работает! (это и есть вывод из связанного вопроса))

Подробнее здесь: https://stackoverflow.com/questions/782 ... middleware
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»