finally будет постпроцесс, до трая - препроцесс https://github.com/Tishka17/aiogram_dialog/blob/ac1fe930b78f99a2f59c90e87383645d790786bd/aiogram_dialog/manager/manager_middleware.py#L39
спасибо!
Можно ещё: result = await handler(event, data) do_postrpocess_things() return result Но тут уже если хендлер упадёт то постпроцесс понятно не исполнится.
По логике ведь finally блок исполнится перед тем, как выполнится return хендлера, а это значит, что оно выполнится перед хендлером, или я туплю сейчас на ночь?
с файнали вообще весело https://stackoverflow.com/questions/19805654/python-try-finally-block-returns
Finally всегда выполняется последним
То есть вернётся хендлер, и при этом в конце выполнится finally?
А вот это я ща проверю
Ну так именно поэтому у меня возник вопрос
def func(): try: return 1 finally: print("aaa") result = func() print(result) Вывод: aaa 1 т.е. возвращается 1, но aaa принтуется ПОСЛЕ ретурна
как я понимаю теперь для каждого типа апдейта нужно свой класс/декоратор миддлваря делать?
Нет, это просто аннотация типа там
А как ты проверил, что из этого быстрее выполнилось? Ведь принт резулта у тебя уже после выполнения функции
не обязательно. Можно регистрировать на update, можно на сами типы апдейтов. Вот например прямо перенесённая с двойки мидлварь https://github.com/Tishka17/aiogram_dialog/blob/ac1fe930b78f99a2f59c90e87383645d790786bd/aiogram_dialog/context/intent_filter.py#L54 Вот здесь например если для всех типов ивентов апдейта одинаковая логика нужна https://github.com/Tishka17/aiogram_dialog/blob/ac1fe930b78f99a2f59c90e87383645d790786bd/aiogram_dialog/manager/manager_middleware.py#L29 П.С detect_content_type в таких случаях будет ненужен после https://github.com/aiogram/aiogram/pull/669/files
Вот две миддлвари, всё ОК: Manager Before Manager Try Intent Before Intent Try INFO:aiogram.dispatcher:Update id=876018697 is handled. Duration 233 ms by bot id=1748149860 Intent Finally Manager Finally
Да мы уже разобрали всё
последний глупый вопрос, если я хочу два ивента обработать в функциональном миддлваре, то мне инстансы чекать?
@dp.message.outer_middleware(MessageCallbackMiddleware()) @dp.callback_query.outer_middleware(MessageCallbackMiddleware()) Может где ошибся так как по памяти писал
Обсуждают сегодня