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

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

Сообщение Гость »


как правильно комбинировать функции обработки исключений RequestValidationError

@app.Exception_handler(RequestValidationError) асинхронная защита validation_Exception_handler (запрос, exc): ответ = подготовить_ответ({}, g_ERROR__INCORRECT_PARAMS) вернуть JSONResponse(содержание=ответ) и функция промежуточного программного кода

@app.middleware("http") async def response_middleware (запрос: Request, call_next): пытаться: результат = ожидание call_next (запрос) res_body = б'' асинхронность для чанка в result.body_iterator: res_body += чанк ответ = подготовить_ответ (res_body.decode(), g_ERROR__ALL_OK) кроме исключения как e: ответ = подготовить_ответ({}, g_ERROR__UNKNOWN_ERROR) вернуть JSONResponse(содержание=ответ) Необходимо, чтобы ТОЛЬКО исключение RequestValidationError запускало функцию

@app.Exception_handler(RequestValidationError) асинхронная защита validation_Exception_handler (запрос, exc): и во всех остальных случаях функция

@app.middleware("http") async def response_middleware (запрос: Request, call_next): Теперь функция response_middleware срабатывает все время и обрабатывает результат validation_Exception_handler, что нарушает основное назначение функции

При использовании @app.middleware("http") любые исключения исчезают вообще, и даже без @app.Exception_handler(RequestValidationError) код последовательно генерирует 200 ОК и

попробуйте: результат = ожидание call_next (запрос) res_body = б'' асинхронность для чанка в result.body_iterator: res_body += чанк ответ = подготовить_ответ (res_body.decode(), g_ERROR__ALL_OK) кроме RequestValidationError как e: ответ = подготовить_ответ({}, g_ERROR__INCORRECT_PARAMS) кроме исключения как e: ответ = подготовить_ответ({}, g_ERROR__UNKNOWN_ERROR) тоже не работает - вообще после

result = ожидание call_next(запрос) исключения не создаются

Как можно решить эту проблему?

С одной стороны нам нужен промежуточный код для разных функций, с другой стороны некоторые исключения (неверные параметры и т.п.) должны отслеживаться до промежуточного кода или внутри него, но не глубже.
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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