как данную задачку решить?
def func(a):
try:
foo()
except SomeError:
return bar(a)
Вопрос: хотелось бы обернуть
foo()
декоратором с try внутри, чтобы сэкономить место в коде, а то подобная конструкция try-except встречается довольно часто. Как можно реализовать декоратор, или есть лучшие варианты?
Примерный ожидаемый вид:
def func(a):
@decorator(a)
foo()
Прям всегда bar вызываешь?
да, bar всегда на своем месте. foo может меняться
Ну ты можешь try except в декораторе сделать, но это очень плохая идея — потом будешь офигевать почему функция, где написано return 100 возвращает объект User
Есть смутное подозрение, что тут нарушены слр абстракций. Можно реалистичный пример?
можно сделать функцию-обертку, в которую отправлять foo, а она уже там будет ее запускать в try и возвращать либо ее результат, либо bar надо только будет разобраться с аргументами для foo и bar, но их можно передавать в каких-нибудь tuple и скармливать внутри, я думаю
from pydantic import BaseModel import aiohttp class CustomRequestModel(BaseModel): {some fields} def handle(request: CustomRequestModel): try: data = get_data_from_api() #вызов к api except aiohttp.ClientResponseError: return send_error_msg(request) # ответ на уровень выше result = get_processed_data(data) # обработка ответа от api return send_success_msg(request, result=result) # ответ на уровень выше
аргументы для foo в неймспейсе func'a, foo может меняться, аргументы к ней тоже, для bar аргумент всегда один = a
Такие штуки мидлварами делают, если что. И это довольно плохой способ реализации, если у тебя нет какого-то протокола вытягивания инфы и статус кода для респонса по объекту ошибки
ничего другого пока нет:D просто делаю запрос к api через aiohttp и пытаюсь ловить исключения)
Какого другого? Напиши просто мидлвару, которая ошибки перехватывает и все. Зачем костылить какие-то непонятные конструкции?
Понял) кстати, вообще классный вариант) все равно ошибки далее наверх отправляю Спасибо 👍
Обсуждают сегодня