МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ
«ЦЕНТР ДЕТСКОГО ТЕХНИЧЕСКОГО ТВОРЧЕСТВА»
Методическая разработка
«Исключения в Python»
к дополнительной общеобразовательной
общеразвивающей программе
технической направленности
«Программирование на Python»
Возраст детей: 10-17 лет
Автор: Костычев Вадим Александрович
г. Заречный Пензенской области
2026 г.
Данный материал предназначен для преподавателей информатики, программирования и студентов (учащихся), изучающих язык программирования Python. Он может быть использован как на лекциях, так и при проведении практических занятий или самостоятельной работе.
Цель: сформировать у учащихся понимание механизма исключений как средства обработки ошибок во время выполнения программы, а также научить использовать конструкции try-except, raise и анализировать иерархию исключений.
Задачи:
1. Объяснить разницу между синтаксическими, логическими ошибками и исключениями.
2. Показать, что исключение — это объект, принадлежащий к определённой иерархии классов.
3. Научить обрабатывать исключения с помощью try-except.
4. Продемонстрировать, как использовать наследование при обработке групп исключений.
5. Научить генерировать собственные исключения с помощью raise.
Типы ошибок в программировании
В процессе написания кода вы неизбежно сталкиваетесь с ошибками. Их можно разделить на три категории:
Синтаксические ошибки
Возникают, когда нарушены правила записи кода на языке Python:
- пропущена скобка,
- неправильный отступ,
- отсутствует двоеточие после if, for, def и т.д.
Пример:
print("Hello"
# SyntaxError: '(' was never closed
Особенность: программа не запускается вообще. Python сразу сообщает об ошибке.
Логические ошибки
Код выполняется без остановки, но даёт неправильный результат из-за неверной логики.
Пример:
rubles = 1800
rate = 60.35
dollars = rubles rate # должно быть деление!
Особенность: Python не сообщает об ошибке — её нужно находить самому (через тестирование или отладку).
Исключения (exceptions)
Программа запускается, но аварийно завершается во время выполнения из-за непредвиденной ситуации.
Пример:
print(10 / 0) # ZeroDivisionError
Что такое исключение?
Исключение — это событие, которое нарушает нормальный ход выполнения программы. В Python каждое исключение — это объект, созданный на основе определённого класса-исключения.
Все исключения образуют иерархию наследования, корнем которой является класс BaseException.
BaseException
├── SystemExit
├── KeyboardInterrupt
├── GeneratorExit
└── Exception
├── ArithmeticError
│ ├── ZeroDivisionError
│ ├── OverflowError
│ └── FloatingPointError
├── LookupError
│ ├── IndexError
│ └── KeyError
├── NameError
├── TypeError
├── ValueError
└── ... и многие другие
Важно: почти все исключения, с которыми вы сталкиваетесь в повседневном программировании, наследуются от класса Exception.
Проверим:
print(issubclass(ZeroDivisionError, Exception)) # True
print(issubclass(KeyError, Exception)) # True
Как обрабатывать исключения?
Когда возникает исключение, программа останавливается. Чтобы этого избежать, используется конструкция try-except.
Синтаксис:
try:
# код, который может вызвать исключение
except ИмяИсключения:
# действия при возникновении исключения
Пример:
try:
x = int(input("Введите число: "))
print(10 / x)
except ZeroDivisionError:
print("Ошибка: деление на ноль!")
Если пользователь введёт 0, программа не упадёт, а выведет сообщение и продолжит работу.
Обработка нескольких исключений
Можно обрабатывать несколько типов исключений:
try:
value = int(input("Число: "))
result = 100 / value
except ValueError:
print("Это не число!")
except ZeroDivisionError:
print("Делить на ноль нельзя!")
Или объединить их:
except (ValueError, ZeroDivisionError):
print("Некорректный ввод!")
Использование наследования при обработке
Благодаря иерархии исключений, можно перехватывать целую группу ошибок одним блоком.
Пример:
try:
# ... деление, возведение в степень и т.д.
except ArithmeticError as e:
print(f"Арифметическая ошибка: {e}")
Этот блок обработает:
- ZeroDivisionError
- OverflowError
- FloatingPointError
Чтобы узнать конкретный тип исключения, используйте переменную через as:
except ArithmeticError as ex:
print(f"Ошибка: {ex} (тип: {type(ex).__name__})")
Генерация исключений: оператор raise
Иногда нужно самому вызвать исключение, чтобы предотвратить некорректное поведение программы.
Пример:
age = int(input("Ваш возраст: "))
if age
raise ValueError("Возраст не может быть отрицательным!")
Вы можете вызывать как встроенные исключения (ValueError, TypeError), так и создавать свои (об этом — в следующих уроках).
Почему именно сейчас?
Исключения — это объекты, и они организованы в иерархию наследования. Без понимания классов и наследования невозможно по-настоящему освоить эту тему. Теперь, когда вы знаете, что:
- ZeroDivisionError — это класс,
- он наследуется от ArithmeticError,
- а тот — от Exception,
И вы готовы работать с исключениями осознанно, а не просто «копировать шаблоны».
Заключение
- Синтаксические ошибки — не позволяют запустить программу;
- Логические ошибки — дают неправильный результат, но не останавливают выполнение;
- Исключения — ошибки времени выполнения, которые можно перехватить и обработать;
- Все исключения — это классы, образующие иерархию наследования;
- Основной инструмент обработки — конструкция try-except;
- Можно обрабатывать как конкретные, так и группы исключений через общего предка;
- Оператор raise позволяет самостоятельно генерировать исключения.
Исключения — это не «враг», а механизм управления ошибками. Они позволяют вашей программе реагировать на непредвиденные ситуации грациозно, а не просто падать.
Освоив исключения, вы переходите от написания «работающего кода» к созданию надёжных, устойчивых и профессиональных программ, способных корректно вести себя даже в нештатных ситуациях.
Проверь себя
1. Чем исключение отличается от синтаксической ошибки?
2. Почему программа с логической ошибкой не выдаёт сообщения об ошибке?
3. Какой класс является корнем иерархии всех исключений в Python?
4. Почему почти все «обычные» исключения наследуются от Exception, а не от BaseException?
5. Что произойдёт, если не обработать возникшее исключение?
6. Можно ли в одном блоке except перехватить несколько типов исключений? Как?
7. Зачем использовать as в конструкции except ValueError as e?
8. Когда уместно использовать оператор raise? Приведи пример.