Использование блока else

Автор: PythonInDepth

Рассмотрим пример использования ключевого слова else в цикле while:

>>> i = 1 
>>> while i < 4:
...     print(i)
...     i += 1
... else: 
...     print('Вышли из цикла!')

Если выполнить этот цикл, то мы получим:

1
2
3
Вышли из цикла!

Здесь блок else выполняется только тогда, когда условие выхода из цикла перестает быть верным. Особенность здесь в том, что если вывалиться из цикла через break или через исключение, то блок else выполняться не будет.

Это работает не только с циклами while, но и с циклами for:

>>> for value in values:
...     if value == 4:
...         print('Нашли!:)')
...     break
... else:
...     print('Не нашли:(')

И так же можно с try-except блоками. На самом деле исключения в Python это не try-except-finally, а try-except-else-finally, ниже пример:

>>> num = 0
>>> try:
...     result = 1 / num
... except ZeroDivisionError:
...     print('Деление на ноль!')
... else:
...     print('Конечное число.')
... finally:
...     print('Вычисления закончены.')
... 
Деление на ноль!
Вычисления закончены.

А если задать num = float('Inf'), то в результате деления мы получим 0 и вывод будет:

Конечное число.
Вычисления закончены.

Блок finally выполняется в любом случае. А else можно использовать, если нужно выполнить еще какой-то код в случае отсутствия исключений. Например, это может быть полезно в тестах, когда мы хотим логировать, как в случае падения теста на исключении, так и в случае, если исключений брошено не было.

В общем, есть конструкции while-else и for-else, в которых else отрабатывает в случае «штатного» завершения цикла. Еще else можно использовать в try-except блоке, чтобы выполнить какой-то код только в случае успешного выполнения блока try. Во всех случаях использование else позволяет более гибко управлять потоком выполнения.