Назначение предложения else в инструкции try на первый взгляд не всегда очевидно для тех, кто только начинает осваивать язык программирования Python.
Тем не менее, без этого предложения нет никакого другого способа узнать(не устанавливая и не проверяя флаги) - выполнение программы продолжилось потому, что исключение в блоке try не было возбуждено, или потому, что исключение было перехвачено и обработано.
Пример:
try:
# Выполняемый код
except:
# Обработка исключения
# Программа оказалась здесь потому, что исключение было обработано
# или потому, что его не возникло?
Точно так же, как инструкция else в операторах цикла делает причину выхода из цикла более очевидной, предложение else в инструкции try однозначно и очевидно сообщает о произошедшем:
try:
# Выполняемый код
except IndexError:
# Обработка исключения
else:
# Исключение не было возбуждено
То же самое поведение можно имитировать, переместив содержимое блока else в блок try:
try:
# Выполняемый код
# Исключение не было возбуждено
except IndexError:
# Обработка исключения
Но это может привести к некорректной классификации исключения. Если какая-либо из инструкции в блоке "Исключение не было возбуждено" приведет к появлению исключения IndexError, оно будет зарегистрировано как ошибка в блоке try и соответственно, ошибочно будет передано обработчику исключения ниже(тонко, но верно!).
При явном использовании выражения else логика выполнения становится более очевидной и гарантируется, что обработчики исключения будут вызываться только для обработки истинных ошибок в блоке, обернутом инструкцией try, а не при выполнении действий, предусматриваемых в блоке else.
Не забывайте помимо программировании держать свое тело в тонусе. Для этого советуем купить креатин и начать прокачать мышечную массу. Обязательно совмещайте спорт и программирование.