Блок else в обработке исключений — штука не самая очевидная, но крайне полезная. Многие путают его с обычным else после if, но тут логика другая. Этот блок срабатывает только тогда, когда в try всё прошло гладко, без единой ошибки. Зачем это нужно? Чтобы отделить "опасный" код от "безопасного". В try кладёшь только то, что реально может упасть, а в else — действия, которые должны выполниться при успехе. Так код становится чище и понятнее. В этом тренажере разберёмся, где писать else, как он взаимодействует с except и finally, и почему иногда без него не обойтись. Будем собирать конструкции, искать ошибки и предсказывать, что выведет код. Готовься думать — тут важно понимать порядок выполнения блоков.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Конструкция try-except.
- Множественные except.
- Блок else в исключениях.
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Когда выполняется else?
Посмотрите на код, где деление проходит успешно. Определите, какое сообщение будет выведено на экран. Обратите внимание на порядок блоков и условия их выполнения.
try:
result = 10 / 2
except ZeroDivisionError:
print("Ошибка деления")
else:
print("Успех")Else при возникновении исключения
Теперь деление на ноль. Проанализируйте, выполнится ли блок else в этом случае и что увидит пользователь.
try:
result = 10 / 0
except ZeroDivisionError:
print("Деление на ноль!")
else:
print("Всё хорошо")Базовая структура с else
Заполните пропуски, чтобы получилась корректная конструкция обработки исключений с блоком else. При успешном открытии файла должно выводиться сообщение об успехе.
input1S:
file = open("data.txt")
input2S FileNotFoundError:
print("Файл не найден")
input3S:
print("Файл успешно открыт")
file.close()Правильный порядок блоков
Расставьте блоки конструкции обработки исключений в правильном порядке. Помните, что Python требует определённую последовательность этих блоков.
else: print("Ошибка!")try: print("Успех!")except Exception: data = load_data()Неправильное расположение else
В этом коде допущена синтаксическая ошибка — блок else находится не на своём месте. Найдите и исправьте строку с ошибкой, переставив блоки в правильном порядке.
try: num = int("42")else: print("Преобразование успешно")except ValueError: print("Ошибка преобразования")Когда выполняется каждый блок?
Сопоставьте каждый блок конструкции try-except-else-finally с условием его выполнения. Перетащите описания справа к соответствующим блокам слева.
finallytryelseexceptПорядок выполнения с finally
Определите, что выведет этот код. Обратите внимание на порядок выполнения блоков else и finally при успешном выполнении try. Введите вывод построчно.
try:
x = 5
except:
print("A")
else:
print("B")
finally:
print("C")Соберите код с обработкой конвертации
Соберите программу, которая пытается преобразовать строку в число. При успехе выводится результат умножения на 2, при ошибке — сообщение об ошибке. Две строки лишние.
print("Ошибка ввода")except ValueError:else:try: print(number * 2) number = int("123") number = str(123)finally:Классификация кода по блокам
Распределите строки кода по блокам, в которых их логичнее всего разместить. Подумайте, какой код "опасный", какой обрабатывает ошибку, а какой выполняется при успехе.
data = file.read()print("Не удалось открыть файл")file = open("config.txt")print(f"Прочитано {len(data)} символов")logging.error("File not found")Исключение в блоке else
Что произойдёт, если исключение возникнет не в try, а в самом блоке else? Проанализируйте код и выберите результат.
try:
x = 10
except ZeroDivisionError:
print("Перехвачено в except")
else:
result = x / 0
print("Результат:", result)Зачем нужен else?
Заполните пропуски токенами из банка, чтобы получить код, где else используется по назначению — для кода, который должен выполниться только при успехе И использует результат из try.
try:
input1S = input2S(input("Введите число: "))
except input3S:
print("Это не число!")
input4S:
print(f"Квадрат числа: {num * num}")Сложный порядок выполнения
Код содержит все четыре бл��ка и исключение НЕ возникает. Определите точный порядок вывода букв. Введите буквы подряд без пробелов.
try:
print("A", end="")
except:
print("B", end="")
else:
print("C", end="")
finally:
print("D", end="")Else без except
Программист попытался использовать else сразу после try, без блока except. Это синтаксическая ошибка. Исправьте код, добавив минимально необходимый except.
try: value = calculate()else: print("Расчёт выполнен")Return в else и finally
Эта функция содержит return в разных блоках. Проанализируйте, какое значение вернёт функция при вызове без аргументов (деление 10/2).
def divide(a=10, b=2):
try:
result = a / b
except ZeroDivisionError:
return "Ошибка"
else:
return result
finally:
return "Finally"
print(divide())Полная конструкция с контекстом
Соберите функцию безопасного чтения JSON-файла. При успехе функция возвращает данные, при ошибке файла — None, при ошибке JSON — пустой словарь. В конце всегда выводится лог. Три строки лишние.
return None finally:def safe_read_json(path):except json.JSONDecodeError:except FileNotFoundError: data = json.load(file) print(f"Операция с {path} завершена") try: return {} return data else: file = open(path) elif:import json file.close()