Множественные except

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

Тренажер по Python

Когда программа падает с ошибкой — это неприятно. Но ещё хуже, когда она падает непредсказуемо из-за разных причин: то файл не найден, то пользователь ввёл буквы вместо числа, то сеть отвалилась. В Python можно ловить разные типы исключений по-разному, используя несколько блоков except подряд. Это позволяет реагировать на каждую проблему своим способом: для ошибки деления на ноль — одно сообщение, для несуществующего файла — другое, для неправильного типа данных — третье. В этом тренажере ты научишься выстраивать цепочки обработчиков, понимать порядок их проверки и избегать типичных ловушек. Помни: порядок блоков except имеет значение, потому что Python проверяет их сверху вниз и останавливается на первом подходящем.

Список тем

1. Какой обработчик сработает?

id: 40067_task1

Изучите код, в котором происходит деление на ноль. Несколько блоков except готовы поймать ошибку. Определите, какое сообщение будет выведено на экран.

Выберите правильный вариант ответа
try:
    result = 10 / 0
except ValueError:
    print("A")
except ZeroDivisionError:
    print("B")
except Exception:
    print("C")
Сообщения
Проверить
Показать подсказку

2. Базовая структура множественных except

id: 40067_task2

Дополните код так, чтобы он отдельно обрабатывал ошибку преобразования типа и ошибку деления на ноль. Используйте стандартные имена исключений Python.

Заполните пропуски
try:
    num = int(input("Введите число: "))
    result = 100 / num
except input1S:
    print("Это не число!")
except input2S:
    print("На ноль делить нельзя!")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Типы исключений и их причины

id: 40067_task3

Сопоставьте типы исключений Python с ситуациями, в которых они возникают. Перетащите исключения из правой колонки к соответствующим описаниям.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
Обращение к ключу, которого нет в словаре
Попытка получить элемент списка по индексу за пределами списка
Сложение строки и числа без преобразования
Открытие файла, который не существует
IndexError
TypeError
FileNotFoundError
KeyError
Сообщения
Проверить
Показать подсказку

4. Исправьте порядок обработчиков

id: 40067_task4

В этом коде есть проблема с порядком блоков except. Из-за неё один из обработчиков никогда не сработает. Найдите и исправьте проблемную строку, поменяв её местами с другой (отредактируйте обе строки).

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

5. Классификация исключений по категориям

id: 40067_task5

Распределите исключения по категориям в зависимости от того, с чем они связаны: с работой с данными или с операциями ввода-вывода.

Перетяните элементы в соответствующие блоки
Ошибки данных
Ошибки ввода-вывода
ValueError
FileNotFoundError
KeyError
IndexError
PermissionError
TypeError
Сообщения
Проверить
Показать подсказку

6. Что выведет код с цепочкой except?

id: 40067_task6

Проанализируйте код и определите, что будет выведено. Введите точный вывод программы (одно слово).

Что должно получиться?
data = {"name": "Alice"}
try:
    print(data["age"])
except ValueError:
    print("VALUE")
except KeyError:
    print("KEY")
except Exception:
    print("OTHER")
Сообщения
Проверить
Показать подсказку

7. Соберите обработчик для чтения файла

id: 40067_task7

Соберите код, который пытается прочитать файл "data.txt" и обрабатывает две возможные ошибки: отсутствие файла и отсутствие прав на чтение. Две строки лишние.

Перетяните в правильном порядке строки из одного блока в другой
except PermissionError:
try:
    print("Нет прав доступа")
except FileNotFoundError:
    f = open("data.txt")
    print("Файл не найден")
except IOError:
    print("Ошибка ввода")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

8. Ловушка с общим Exception

id: 40067_task8

В коде Exception стоит первым. Какое сообщение будет выведено при выполнении?

Выберите правильный вариант ответа
try:
    nums = [1, 2, 3]
    print(nums[10])
except Exception:
    print("GENERAL")
except IndexError:
    print("INDEX")
except KeyError:
    print("KEY")
Сообщения
Проверить
Показать подсказку

9. Заполните обработчики из банка

id: 40067_task9

Используя токены из банка, заполните пропуски так, чтобы каждый тип ошибки обрабатывался соответствующим сообщением. Обратите внимание на логику кода.

Нужно правильно расставить в пропуски предложенные варианты
try:
    x = int("hello")
    y = 10 / x
    z = [1, 2][x]
except input1S:
    print("Не удалось преобразовать в число")
except input2S:
    print("Деление на ноль")
except input3S:
    print("Индекс за пределами списка")
ValueError
ZeroDivisionError
IndexError
TypeError
KeyError
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

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

id: 40067_task10

Расположите блоки except в правильном порядке: от самого специфичного к самому общему. Это важно, чтобы каждый обработчик имел шанс сработать.

Расставьте строки в правильном порядке
except Exception:
except ZeroDivisionError:
except ValueError:
except ArithmeticError:
Сообщения
Проверить
Показать подсказку

11. Получение информации об исключении

id: 40067_task11

Дополните код так, чтобы при возникновении ошибки выводилось её описание. Используйте синтаксис с ключевым словом для привязки исключения к переменной.

Заполните пропуски
try:
    result = 10 / 0
except ZeroDivisionError input1S error:
    print(f"Произошла ошибка: {input2S}")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

12. Цепочка исключений с as

id: 40067_task12

Определите, что выведет код. Введите число — результат вычисления len() от текста ошибки.

Что должно получиться?
try:
    items = []
    x = items[0]
except IndexError as e:
    print(len(str(e)))
Сообщения
Проверить
Показать подсказку

13. Синтаксическая ошибка в множественных except

id: 40067_task13

В коде допущена синтаксическая ошибка при попытке обработать несколько исключений в одном блоке except. Найдите и исправьте строку с ошибкой.

Найдите ошибку и исправьте
try:
    value = int(input())
    result = 100 / value
except ValueError, ZeroDivisionError:
    print("Ошибка ввода или деления")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

14. Группировка исключений в кортеж

id: 40067_task14

Код обрабатывает несколько исключений одним блоком except. Что будет выведено при попытке преобразовать строку "xyz" в число?

Выберите правильный вариант ответа
try:
    num = int("xyz")
    result = 10 / num
except (ValueError, ZeroDivisionError):
    print("INPUT_ERROR")
except TypeError:
    print("TYPE_ERROR")
Сообщения
Проверить
Показать подсказку

15. Полная структура обработки с finally

id: 40067_task15

Соберите код, который открывает файл, читает число, делит 100 на это число и всегда закрывает файл в блоке finally. Три строки лишние.

Перетяните в правильном порядке строки из одного блока в другой
except ZeroDivisionError:
try:
    print("Деление на ноль!")
finally:
    print("Файл не найден!")
    f.close()
except FileNotFoundError:
    f = open("num.txt")
except ValueError:
    print("Закрываем файл")
else:
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Python: запуск кода в браузере

id: 40067_compiler
🐍
Запустить тренажёр (Python)
НайтиКурс.Ру