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

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

1.3 Junior🔥 151 комментариев
#Другое

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

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

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

Механизм работы try-except-else

Блок else в конструкции try-except-else выполняется только если в блоке try НЕ произошло никакого исключения. Это важный, но часто забываемый механизм.

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

ВЫПОЛНЯЕТСЯ else если:

  • Весь код в try выполнился успешно без ошибок
  • Никакой except не сработал

НЕ выполняется else если:

  • Произошло исключение (даже если оно было обработано в except)
  • Возникла ошибка типа KeyboardInterrupt или SystemExit
# Пример 1: else выполняется
try:
    x = 10 / 2
    print("Вычисление прошло успешно")
except ZeroDivisionError:
    print("Ошибка деления на ноль!")
else:
    print("Результат:", x)  # ЭТО ВЫПОЛНИТСЯ

# Output: Результат: 5.0

# Пример 2: else НЕ выполняется
try:
    x = 10 / 0
except ZeroDivisionError:
    print("Ошибка деления на ноль!")
else:
    print("Результат:", x)  # НЕ ВЫПОЛНИТСЯ

# Output: Ошибка деления на ноль!

Практические примеры использования

Работа с файлами:

try:
    with open("data.txt", "r") as f:
        data = f.read()
except FileNotFoundError:
    print("Файл не найден")
else:
    lines = data.split("\\n")
    print(f"Прочитано {len(lines)} строк")

Парсинг JSON:

import json

try:
    json_data = json.loads(user_input)
except json.JSONDecodeError:
    print("Некорректный JSON")
else:
    user_id = json_data.get("user_id")
    print(f"Пользователь {user_id}")

Запросы к API:

import requests

try:
    response = requests.get("https://api.example.com/data", timeout=5)
    response.raise_for_status()
except requests.HTTPError:
    print("HTTP ошибка")
else:
    data = response.json()
    print(f"Получено {len(data)} записей")

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

  1. Успешный путь с дополнительной логикой — код else только для успешных случаев
  2. Чистота кода — разделяет обработку ошибок от основной логики
  3. Несколько try-except блоков подряд — структурирует код

Отличие от finally

  • else — выполняется только если НЕТ исключения
  • finally — выполняется ВСЕГДА
try:
    x = 10 / 2
except ZeroDivisionError:
    print("Ошибка!")
else:
    print(f"else: Результат {x}")  # выполнится
finally:
    print("finally: Очистка")  # выполнится ВСЕГДА
Когда выполняется else в try except else? | PrepBro