← Назад к вопросам

Когда выполняется блок кода в else?

2.3 Middle🔥 131 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Когда выполняется блок else в Python

В Python блок else имеет разные значения в зависимости от контекста. Рассмотрим все варианты.

1. else с if

Блок else выполняется, когда условие в if ложно:

age = 15

if age >= 18:
    print('Взрослый')
else:
    print('Несовершеннолетний')  # Выведет это

2. else с if-elif-else

Выполняется при всех условиях, кроме if и elif:

grade = 'F'

if grade == 'A':
    print('Отлично')
elif grade == 'B':
    print('Хорошо')
elif grade == 'C':
    print('Удовлетворительно')
else:
    print('Неудовлетворительно')  # Выведет это

3. else в цикле for

ВАЖНО: Блок else выполняется после цикла, если он завершился нормально (без break):

# Пример 1: Без break — else выполнится
for i in range(3):
    print(i)
else:
    print('Цикл завершился')  # Выведет это

# Результат:
# 0
# 1
# 2
# Цикл завершился
# Пример 2: С break — else НЕ выполнится
for i in range(10):
    if i == 3:
        break
    print(i)
else:
    print('Цикл завершился')  # Не выведет это

# Результат:
# 0
# 1
# 2

4. else в цикле while

Аналогично for — выполняется, если цикл закончился без break:

# Пример 1: Нормальное завершение
count = 0
while count < 3:
    print(count)
    count += 1
else:
    print('While завершился')  # Выведет это

# Результат:
# 0
# 1
# 2
# While завершился
# Пример 2: Выход по break
count = 0
while count < 10:
    if count == 2:
        break
    print(count)
    count += 1
else:
    print('While завершился')  # Не выведет это

# Результат:
# 0
# 1

5. else с try-except

Выполняется, если исключение не было возбуждено:

# Пример 1: Без ошибок
try:
    result = 10 / 2
except ZeroDivisionError:
    print('Ошибка: деление на ноль')
else:
    print(f'Результат: {result}')  # Выведет это

# Результат:
# Результат: 5.0
# Пример 2: С ошибкой
try:
    result = 10 / 0
except ZeroDivisionError:
    print('Ошибка: деление на ноль')  # Выведет это
else:
    print(f'Результат: {result}')  # Не выведет это

# Результат:
# Ошибка: деление на ноль

Практический пример: Поиск в списке

def find_user(users, user_id):
    """Ищет пользователя и возвращает его или сообщение об ошибке"""
    for user in users:
        if user['id'] == user_id:
            print(f'Найден: {user["name"]}')
            break
    else:
        # Выполнится, если не было break
        print(f'Пользователь с id {user_id} не найден')

users = [
    {'id': 1, 'name': 'Alice'},
    {'id': 2, 'name': 'Bob'},
]

find_user(users, 2)  # Найден: Bob
find_user(users, 99)  # Пользователь с id 99 не найден

Таблица: Когда выполняется else

КонструкцияКогда else выполнится
if-elseКогда условие ложно
if-elif-elseКогда все условия ложны
for-elseПосле цикла без break
while-elseПосле цикла без break
try-except-elseЕсли исключение не возникло

Сложный пример: Валидация пароля

def validate_password(password):
    try:
        # Проверка длины
        if len(password) < 8:
            raise ValueError('Пароль короче 8 символов')
        
        # Проверка наличия цифр
        for char in password:
            if char.isdigit():
                break
        else:
            raise ValueError('Пароль не содержит цифр')
        
        # Успешно
        return True
        
    except ValueError as e:
        print(f'Ошибка: {e}')
        return False
    else:
        # Если исключение не было, можно что-то сделать
        print('Пароль прошёл первичную проверку')

validate_password('abc')  # Ошибка: Пароль короче 8 символов
validate_password('abcdefgh')  # Ошибка: Пароль не содержит цифр
validate_password('abcdefg1')  # Пароль прошёл первичную проверку

Ключевые моменты

  1. else в if — выполняется при ложном условии
  2. else в циклах — выполняется при нормальном завершении цикла (без break)
  3. else в try — выполняется, если нет исключений
  4. else-if в Python — пишется как elif, а не else if

Итог: Блок else — это мощный инструмент Python для обработки разных сценариев. Особенно полезен в циклах для проверки, был ли вызван break, и в try-except для разделения успешного выполнения от обработки ошибок.