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? Он выполняется только при успехе и отделяет «удачный» код от рискованного.
Начать игру бесплатно