Блок else в исключениях

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

Блок else в обработке исключений — штука не самая очевидная, но крайне полезная. Многие путают его с обычным else после if, но тут логика другая. Этот блок срабатывает только тогда, когда в try всё прошло гладко, без единой ошибки. Зачем это нужно? Чтобы отделить "опасный" код от "безопасного". В try кладёшь только то, что реально может упасть, а в else — действия, которые должны выполниться при успехе. Так код становится чище и понятнее. В этом тренажере разберёмся, где писать else, как он взаимодействует с except и finally, и почему иногда без него не обойтись. Будем собирать конструкции, искать ошибки и предсказывать, что выведет код. Готовься думать — тут важно понимать порядок выполнения блоков.

Список тем

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

id: 40068_task1

Посмотрите на код, где деление проходит успешно. Определите, какое сообщение будет выведено на экран. Обратите внимание на порядок блоков и условия их выполнения.

Выберите правильный вариант ответа
try:
    result = 10 / 2
except ZeroDivisionError:
    print("Ошибка деления")
else:
    print("Успех")
Сообщения
Проверить
Показать подсказку

Else при возникновении исключения

id: 40068_task2

Теперь деление на ноль. Проанализируйте, выполнится ли блок else в этом случае и что увидит пользователь.

Выберите правильный вариант ответа
try:
    result = 10 / 0
except ZeroDivisionError:
    print("Деление на ноль!")
else:
    print("Всё хорошо")
Сообщения
Проверить
Показать подсказку

Базовая структура с else

id: 40068_task3

Заполните пропуски, чтобы получилась корректная конструкция обработки исключений с блоком else. При успешном открытии файла должно выводиться сообщение об успехе.

Заполните пропуски
input1S:
    file = open("data.txt")
input2S FileNotFoundError:
    print("Файл не найден")
input3S:
    print("Файл успешно открыт")
    file.close()
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Правильный порядок блоков

id: 40068_task4

Расставьте блоки конструкции обработки исключений в правильном порядке. Помните, что Python требует определённую последовательность этих блоков.

Расставьте строки в правильном порядке
else:
    print("Ошибка!")
try:
    print("Успех!")
except Exception:
    data = load_data()
Сообщения
Проверить
Показать подсказку

Неправильное расположение else

id: 40068_task5

В этом коде допущена синтаксическая ошибка — блок else находится не на своём месте. Найдите и исправьте строку с ошибкой, переставив блоки в правильном порядке.

Найдите ошибку и исправьте
try:
    num = int("42")
else:
    print("Преобразование успешно")
except ValueError:
    print("Ошибка преобразования")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

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

id: 40068_task6

Сопоставьте каждый блок конструкции try-except-else-finally с условием его выполнения. Перетащите описания справа к соответствующим блокам слева.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Выполняется всегда, содержит "опасный" код
Выполняется только если возникло исключение указанного типа
Выполняется только если исключений НЕ было
Выполняется ВСЕГДА, независимо от исключений
finally
try
else
except
Сообщения
Проверить
Показать подсказку

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

id: 40068_task7

Определите, что выведет этот код. Обратите внимание на порядок выполнения блоков else и finally при успешном выполнении try. Введите вывод построчно.

Что должно получиться?
try:
    x = 5
except:
    print("A")
else:
    print("B")
finally:
    print("C")
Сообщения
Проверить
Показать подсказку

Соберите код с обработкой конвертации

id: 40068_task8

Соберите программу, которая пытается преобразовать строку в число. При успехе выводится результат умножения на 2, при ошибке — сообщение об ошибке. Две строки лишние.

Перетяните в правильном порядке строки из одного блока в другой
print("Ошибка ввода")
except ValueError:
else:
try:
    print(number * 2)
    number = int("123")
    number = str(123)
finally:
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Классификация кода по блокам

id: 40068_task9

Распределите строки кода по блокам, в которых их логичнее всего разместить. Подумайте, какой код "опасный", какой обрабатывает ошибку, а какой выполняется при успехе.

Перетяните элементы в соответствующие блоки
Блок try
Блок except
Блок else
data = file.read()
print("Не удалось открыть файл")
file = open("config.txt")
print(f"Прочитано {len(data)} символов")
logging.error("File not found")
Сообщения
Проверить
Показать подсказку

Исключение в блоке else

id: 40068_task10

Что произойдёт, если исключение возникнет не в try, а в самом блоке else? Проанализируйте код и выберите результат.

Выберите правильный вариант ответа
try:
    x = 10
except ZeroDivisionError:
    print("Перехвачено в except")
else:
    result = x / 0
    print("Результат:", result)
Сообщения
Проверить
Показать подсказку

Зачем нужен else?

id: 40068_task11

Заполните пропуски токенами из банка, чтобы получить код, где else используется по назначению — для кода, который должен выполниться только при успехе И использует результат из try.

Нужно правильно расставить в пропуски предложенные варианты
try:
    input1S = input2S(input("Введите число: "))
except input3S:
    print("Это не число!")
input4S:
    print(f"Квадрат числа: {num * num}")
num
int
ValueError
else
str
TypeError
try
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сложный порядок выполнения

id: 40068_task12

Код содержит все четыре бл��ка и исключение НЕ возникает. Определите точный порядок вывода букв. Введите буквы подряд без пробелов.

Что должно получиться?
try:
    print("A", end="")
except:
    print("B", end="")
else:
    print("C", end="")
finally:
    print("D", end="")
Сообщения
Проверить
Показать подсказку

Else без except

id: 40068_task13

Программист попытался использовать else сразу после try, без блока except. Это синтаксическая ошибка. Исправьте код, добавив минимально необходимый except.

Найдите ошибку и исправьте
try:
    value = calculate()
else:
    print("Расчёт выполнен")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Return в else и finally

id: 40068_task14

Эта функция содержит return в разных блоках. Проанализируйте, какое значение вернёт функция при вызове без аргументов (деление 10/2).

Выберите правильный вариант ответа
def divide(a=10, b=2):
    try:
        result = a / b
    except ZeroDivisionError:
        return "Ошибка"
    else:
        return result
    finally:
        return "Finally"

print(divide())
Сообщения
Проверить
Показать подсказку

Полная конструкция с контекстом

id: 40068_task15

Соберите функцию безопасного чтения 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()
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру