Когда программа падает с ошибкой — это неприятно. Но ещё хуже, когда она падает непредсказуемо из-за разных причин: то файл не найден, то пользователь ввёл буквы вместо числа, то сеть отвалилась. В Python можно ловить разные типы исключений по-разному, используя несколько блоков except подряд. Это позволяет реагировать на каждую проблему своим способом: для ошибки деления на ноль — одно сообщение, для несуществующего файла — другое, для неправильного типа данных — третье. В этом тренажере ты научишься выстраивать цепочки обработчиков, понимать порядок их проверки и избегать типичных ловушек. Помни: порядок блоков except имеет значение, потому что Python проверяет их сверху вниз и останавливается на первом подходящем.
- Модуль 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: Продвинутые возможности
1. Какой обработчик сработает?
Изучите код, в котором происходит деление на ноль. Несколько блоков except готовы поймать ошибку. Определите, какое сообщение будет выведено на экран.
try:
result = 10 / 0
except ValueError:
print("A")
except ZeroDivisionError:
print("B")
except Exception:
print("C")2. Базовая структура множественных except
Дополните код так, чтобы он отдельно обрабатывал ошибку преобразования типа и ошибку деления на ноль. Используйте стандартные имена исключений Python.
try:
num = int(input("Введите число: "))
result = 100 / num
except input1S:
print("Это не число!")
except input2S:
print("На ноль делить нельзя!")3. Типы исключений и их причины
Сопоставьте типы исключений Python с ситуациями, в которых они возникают. Перетащите исключения из правой колонки к соответствующим описаниям.
IndexErrorTypeErrorFileNotFoundErrorKeyError4. Исправьте порядок обработчиков
В этом коде есть проблема с порядком блоков except. Из-за неё один из обработчиков никогда не сработает. Найдите и исправьте проблемную строку, поменяв её местами с другой (отредактируйте обе строки).
try: data = int("abc")except Exception: print("Общая ошибка")except ValueError: print("Ошибка значения")5. Классификация исключений по категориям
Распределите исключения по категориям в зависимости от того, с чем они связаны: с работой с данными или с операциями ввода-вывода.
6. Что выведет код с цепочкой except?
Проанализируйте код и определите, что будет выведено. Введите точный вывод программы (одно слово).
data = {"name": "Alice"}
try:
print(data["age"])
except ValueError:
print("VALUE")
except KeyError:
print("KEY")
except Exception:
print("OTHER")7. Соберите обработчик для чтения файла
Соберите код, который пытается прочитать файл "data.txt" и обрабатывает две возможные ошибки: отсутствие файла и отсутствие прав на чтение. Две строки лишние.
except PermissionError:try: print("Нет прав доступа")except FileNotFoundError: f = open("data.txt") print("Файл не найден")except IOError: print("Ошибка ввода")8. Ловушка с общим Exception
В коде Exception стоит первым. Какое сообщение будет выведено при выполнении?
try:
nums = [1, 2, 3]
print(nums[10])
except Exception:
print("GENERAL")
except IndexError:
print("INDEX")
except KeyError:
print("KEY")9. Заполните обработчики из банка
Используя токены из банка, заполните пропуски так, чтобы каждый тип ошибки обрабатывался соответствующим сообщением. Обратите внимание на логику кода.
try:
x = int("hello")
y = 10 / x
z = [1, 2][x]
except input1S:
print("Не удалось преобразовать в число")
except input2S:
print("Деление на ноль")
except input3S:
print("Индекс за пределами списка")10. Правильный порядок обработчиков
Расположите блоки except в правильном порядке: от самого специфичного к самому общему. Это важно, чтобы каждый обработчик имел шанс сработать.
except Exception:except ZeroDivisionError:except ValueError:except ArithmeticError:11. Получение информации об исключении
Дополните код так, чтобы при возникновении ошибки выводилось её описание. Используйте синтаксис с ключевым словом для привязки исключения к переменной.
try:
result = 10 / 0
except ZeroDivisionError input1S error:
print(f"Произошла ошибка: {input2S}")12. Цепочка исключений с as
Определите, что выведет код. Введите число — результат вычисления len() от текста ошибки.
try:
items = []
x = items[0]
except IndexError as e:
print(len(str(e)))13. Синтаксическая ошибка в множественных except
В коде допущена синтаксическая ошибка при попытке обработать несколько исключений в одном блоке except. Найдите и исправьте строку с ошибкой.
try: value = int(input()) result = 100 / valueexcept ValueError, ZeroDivisionError: print("Ошибка ввода или деления")14. Группировка исключений в кортеж
Код обрабатывает несколько исключений одним блоком except. Что будет выведено при попытке преобразовать строку "xyz" в число?
try:
num = int("xyz")
result = 10 / num
except (ValueError, ZeroDivisionError):
print("INPUT_ERROR")
except TypeError:
print("TYPE_ERROR")15. Полная структура обработки с finally
Соберите код, который открывает файл, читает число, делит 100 на это число и всегда закрывает файл в блоке finally. Три строки лишние.
except ZeroDivisionError:try: print("Деление на ноль!")finally: print("Файл не найден!") f.close()except FileNotFoundError: f = open("num.txt")except ValueError: print("Закрываем файл")else: