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

Что такое конструкция try except else?

1.3 Junior🔥 201 комментариев
#Python

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

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

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

Конструкция try-except-else в Python

Try-except-else — это расширенный механизм обработки исключений в Python, который позволяет разделить код на три части: попытка выполнения (try), обработка ошибок (except) и выполнение если ошибок не было (else).

Структура конструкции

try:
    # Код, который может вызвать исключение
    result = 10 / 2
except ZeroDivisionError:
    # Выполняется ТОЛЬКО если произойдёт исключение
    print("Ошибка: деление на ноль")
else:
    # Выполняется ТОЛЬКО если исключения НЕ было
    print(f"Результат: {result}")
finally:
    # Выполняется ВСЕГДА (опционально)
    print("Операция завершена")

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

# Пример 1: ошибка ИЛИ нет ошибки?
try:
    x = int("abc")  # Это вызовет ValueError
except ValueError:
    print("Не смогли преобразовать в число")  # Выполнится это
else:
    print("Успешно преобразовали")  # А это НЕ выполнится
finally:
    print("Блок finally всегда выполняется")  # Это выполнится

# Вывод:
# Не смогли преобразовать в число
# Блок finally всегда выполняется


# Пример 2: если ошибки нет
try:
    x = int("123")  # Успешно
except ValueError:
    print("Не смогли преобразовать в число")  # Это НЕ выполнится
else:
    print(f"Успешно преобразовали: {x}")  # Это выполнится
finally:
    print("Блок finally всегда выполняется")  # Это выполнится

# Вывод:
# Успешно преобразовали: 123
# Блок finally всегда выполняется

Практические примеры

Пример 1: Чтение файла с проверкой

try:
    with open("data.txt", "r", encoding="utf-8") as f:
        data = f.read()
except FileNotFoundError:
    print("Файл не найден")
except IOError:
    print("Ошибка при чтении файла")
else:
    # Обработка данных ТОЛЬКО если файл прочитан успешно
    lines = data.split("\n")
    print(f"Прочитано {len(lines)} строк")
    processed_data = [line.strip() for line in lines if line.strip()]
    print(f"После обработки: {len(processed_data)} строк")
finally:
    print("Операция чтения завершена")

Пример 2: Подключение к БД

import psycopg2

try:
    conn = psycopg2.connect(
        dbname="mydb",
        user="user",
        password="password",
        host="localhost"
    )
except psycopg2.OperationalError:
    print("Не удалось подключиться к БД")
except psycopg2.DatabaseError as e:
    print(f"Ошибка БД: {e}")
else:
    # Выполняем запросы ТОЛЬКО если соединение установлено
    cursor = conn.cursor()
    try:
        cursor.execute("SELECT COUNT(*) FROM users")
        count = cursor.fetchone()[0]
        print(f"Всего пользователей: {count}")
    except psycopg2.Error as e:
        print(f"Ошибка при выполнении запроса: {e}")
    finally:
        cursor.close()
finally:
    if conn:
        conn.close()
        print("Соединение закрыто")

Пример 3: Обработка JSON

import json

try:
    with open("config.json", "r") as f:
        config = json.load(f)
except FileNotFoundError:
    print("Файл конфигурации не найден")
    config = {}
except json.JSONDecodeError:
    print("Ошибка в формате JSON")
    config = {}
else:
    # Используем конфигурацию ТОЛЬКО если она успешно загружена
    db_host = config.get("db_host", "localhost")
    db_port = config.get("db_port", 5432)
    print(f"Подключение к {db_host}:{db_port}")
finally:
    print("Загрузка конфигурации завершена")

Преимущества else блока

  1. Читаемость: ясно видно, какой код зависит от успешного выполнения try
  2. Разделение логики: код, который выполняется только при успехе, находится в else
  3. Избежание вложенности: не нужно вкладывать код в условия
  4. Правильная обработка исключений: else ловит исключения ТОЛЬКО в try, а не в except

Порядок выполнения

1. Выполняется блок try
2. Если исключение:
   → Выполняется try.except
   → else НЕ выполняется
   → finally выполняется
3. Если нет исключения:
   → else выполняется
   → finally выполняется

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

  • try-except-else: когда нужна специальная логика при успехе
  • try-except: когда просто обрабатываем ошибку
  • try-finally: когда нужна очистка ресурсов
  • try-except-finally: когда нужна обработка ошибок И очистка
  • try-except-else-finally: когда нужна полная контролируемость

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

Что такое конструкция try except else? | PrepBro