В этом модуле мы разберем, как делать программы надежными и устойчивыми к ошибкам. Вы узнаете, как использовать блок try-except, чтобы программа не "падала" при некорректных данных, а продолжала работать или корректно сообщала о проблеме.
Мы пройдем путь от простого перехвата ошибок до использования блоков else и finally. Задания помогут вам научиться различать типы исключений (ValueError, ZeroDivisionError и другие) и правильно их обрабатывать. Внимательно читайте условия и обращайте внимание на синтаксис 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.
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Базовая структура перехвата ошибок
Допишите пропущенные ключевые слова, чтобы код мог безопасно попытаться выполнить деление. Если возникнет ошибка деления на ноль, программа должна вывести сообщение, а не аварийно завершиться.
input1S:
result = 10 / 0
print(result)
input2S ZeroDivisionError:
print("Делить на ноль нельзя!")Определение типа исключения
Посмотрите на код. Какое именно исключение возникнет при попытке преобразовать строку "hello" в целое число? Выберите правильное название класса ошибки.
try:
number = int("hello")
except Exception as e:
print(type(e).__name__)Исправьте синтаксические ошибки
В этом коде две ошибки. Первая — использование неверного ключевого слова (как в Java или JS), вторая — отсутствие обязательного знака препинания после названия ошибки. Найдите и исправьте строки.
try: print(x)catch NameError print("Переменная не определена")Сопоставление кода и обработчиков
Расставьте обработчики исключений (`except`) в соответствующие блоки `try`. Вам нужно понять, какой код вызывает какую ошибку: обращение к несуществующему ключу словаря или выход за границы списка.
# Блок 1: Работа со списком
try:
my_list = [1, 2, 3]
print(my_list[10])
input1S:
print("Нет такого индекса!")
# Блок 2: Работа со словарем
try:
my_dict = {"name": "Alice"}
print(my_dict["age"])
input2S:
print("Нет такого ключа!")Классификация причин ошибок
Распределите фрагменты кода по категориям ошибок, которые они вызовут при выполнении. У нас три корзины: математическая ошибка, ошибка типа и ошибка имени переменной.
val = 10 / 0print("Age: " + 25)print(unknown_var)a = 5 % 0len(500)y = x + 1Безопасное преобразование ввода
Соберите программу, которая запрашивает возраст пользователя. Если введено не число, программа должна вывести сообщение об ошибке. Используйте блок `else`, чтобы вывести возраст, если ввод был корректным. Будьте внимательны, есть лишние строки с синтаксическими ошибками.
try: age = int(input("Введите возраст: "))except ValueError: print("Это не число!")else: print(f"Вам {age} лет")catch ValueError: if age:Блоки try-except-else-finally
Сопоставьте блоки конструкции обработки исключений с их описанием. Вы должны точно понимать, при каких условиях срабатывает каждый блок.
try:except:else:finally:Что выведет код с блоком finally?
Проанализируйте код. Мы делим 10 на 2 (ошибки нет). Внимательно посмотрите, что выводится в блоке `else`, а что в `finally`. Запишите полный вывод программы в одну строку через пробел (если выводится несколько слов).
try:
res = 10 / 2
except ZeroDivisionError:
print("Error")
else:
print("OK")
finally:
print("End")Иерархия обработки исключений
Составьте код, который сначала пытается выполнить действие, затем ловит специфичную ошибку (`ValueError`), и только в конце ловит все остальные ошибки (`Exception`). Порядок `except` важен!
try: x = int(input())except ValueError: print("Нужно ввести число")except Exception: print("Другая ошибка")