Есть ли чистый способ обработки повторного использования try... кроме блоков, которые вызывают ранний возврат функции?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли чистый способ обработки повторного использования try... кроме блоков, которые вызывают ранний возврат функции?

Сообщение Anonymous »

Я пишу API функций Azure со множеством разных конечных точек со схожим внутренним поведением. Одним из основных шагов в каждой конечной точке является взятие каждого голого POST и анализ всех без исключения аргументов (поступающих в виде словаря) в пользовательский объект запроса, который я определяю, который в дальнейшем можно использовать для любого поведения функции. Каждый объект запроса ожидает, что в данных запроса будут присутствовать определенные ключи, и я вызываю исключения внутри объекта, чтобы направить поток программы в основной функции на ранний ответ с кодом ошибки.
Мой основной объект Вопрос в том, что мне нужно повторно использовать эти блоки try...кроме в каждой функции, поскольку я хочу, чтобы ответы были одинаковыми. Есть ли способ абстрагировать это до одного многоразового блока?Это пример того, как будет выглядеть одна конечная точка:
from requests import ShowUsersRequest

def my_endpoint(req: azure.functions.HttpRequest):
try:
wrapped_request = ShowUsersRequest(req)
except KeyError:
return func.HttpResponse('Request missing argument(s)', status_code=400)
except ValueError as e:
return func.HttpResponse(f'One or more request arguments was of invalid type. {e.args[0]}', status_code=400)

... # rest of function continues

И как будет выглядеть объект запроса:
# requests.py

class ShowUsersRequest:
def __init__(self, req: func.HttpRequest) -> None:
# KeyErrors would arise from a missing key in the params dict
self.identifier = req.params['account_identifier']
self.client_code = int(req.params['client_code'])

# raise ValueError to represent some kind of validation problem
if self.client_code < 0:
raise ValueError('Client code must be non-negative')


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

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

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

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

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

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

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