Дрон Кодер — программирование для детей и взрослых в игровой форме. Начать бесплатно

finally и else в try

У конструкции try есть два дополнительных блока — else и finally. Они делают обработку ошибок аккуратнее.

else: если ошибки не было

Блок else выполняется, только если в try не возникло ошибки. Туда помещают код, который должен идти после успешного действия. Это чище, чем писать его в самом try, — сразу видно, что относится к «успеху».

finally: выполнится в любом случае

Блок finally выполняется всегда — была ошибка или нет. В нём делают завершающие действия, которые нужно выполнить обязательно: закрыть файл, освободить ресурс. Даже если внутри try произошла ошибка, finally всё равно сработает.

try:
    f = open('data.txt')
    data = f.read()
except FileNotFoundError:
    print('нет файла')
finally:
    print('готово')   # выполнится всегда

Когда что использовать

else — для кода «при успехе», finally — для обязательной уборки. Новичку чаще нужен finally, чтобы гарантированно закрыть ресурс. else встречается реже, но делает логику яснее, когда нужен.

Частые вопросы

Когда выполнится finally? Всегда — и при ошибке, и без неё.

Чем else лучше кода в try? Он выполняется только при успехе и отделяет «удачный» код от рискованного.

Начать игру бесплатно
Попробуй прямо здесь
Уровень 1

Задание