Веб-версияОткрыть в Telegram

Постtry, except, finally и оператор return в Python: как работает finally при наличии return

31 мая 2023
C
CoolPython
Ссылка
нажмите — покажем
try, except, finally и оператор return в Python: как работает finally при наличии return Python предоставляет механизм обработки исключений с помощью операторов try, except и finally. Когда внутри блока try возникает исключение, оно может быть перехвачено и обработано в блоке except. Кроме того, блок finally позволяет выполнять нужные вам действия независимо от того, произошло исключение или нет. Но если внутри блока finally использовать оператор return, как в примере выше, возникает особенность. Вот ещё раз пример кода из опроса: def try_with_returns(): try: return 'try clause' except: return 'exception clause' finally: return 'final clause' print(try_with_returns()) Можно ожидать, что будет выведено 'try clause' и 'final clause', но фактически выводится только 'final clause'. Почему? Документация Python объясняет такое поведение. При наличии блока finally, код внутри него должен быть выполнен в любом случае. Поэтому если блок finally содержит return, то возвращаемое значение будет именно то, которое указано внутри finally, а не внутри try, иначе до finally поток исполнения просто не дойдет. Вот еще один пример для лучшего понимания: def bool_return(): try: return True finally: return False print(bool_return()) В этом случае можно ожидать, что будет выведено True, но выводится False. Это снова происходит из-за оператора return в блоке finally, который прерывает выполнение блока try и возвращает значение False. Итак, при использовании оператора return внутри try/except/finally следует иметь в виду, что возвращаемое значение будет определено блоком finally. И если finally содержит оператор return, то его значение будет возвращено вместо значения из блоков выше. Дока: https://docs.python.org/3/tutorial/errors.html?highlight=try%20finally#defining-clean-up-actions
30 · 5.9K ·

Рядом в ленте

CCoolPythonЧто выведет этот фрагмент кода? Ниже квизCCoolPythonОпрос
это сообщение
CCoolPythonВопрос от студента: как использовать в map функцию с параметром? Все, кто сталкивался с map(), знают, как использовать её, если параметры не нужны. Например, с CCoolPythonГенератор кортежей Генераторы списков — это конструкции вида [x for x in range(5)] # [0, 1, 2, 3, 4] Чаще всего их используют для создания списков на лету. Но м
CCoolPythonCoolPython@coolpython · канал · Технологии
4 248подписчиков103постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем