Обработка ошибок и исключений
В процессе работы программы могут случаться различные непредвиденные проблемы.
Например:
- При скачивании файла оборвалось соединение...
-- Такое вполне может произойти, например если у пользователя плохой сигнал wi-fi.
- При попытке записать файл на USB устройство и устройство оказалось недоступно...
-- Такое может случиться, если пользователь задел рукой USB устройство.
- При попытке выполнить запрос к базе данных, может оказаться, что она недоступна.
-- Такое может случиться, если сервер с БД выключился/перезагрузился и т.п.
Примеров можно приводить много. Любая из этих проблем, потенциально может вывести из строя вашу программу.
Ошибки в работе программы - это конечно плохо, и к сожалению они случаются. Было бы неплохо их максимально предсказывать и если они случаются, то лучше постараться быть вкурсе и держать ситуацию под контролем.
Обработка ошибок и исключений — это важная часть программирования, которая позволяет управлять неожиданными ситуациями, возникающими во время выполнения программы. В Python для этого используются конструкции try
, except
, finally
и raise
.
Основные понятия
Исключение (Exception): Это ошибка, которая возникает во время выполнения программы.
Обработка исключений: Механизм, который позволяет "поймать" исключение и выполнить определённые действия вместо завершения программы.
Стек вызовов: Цепочка вызовов функций, которая привела к исключению.
Блок try
-except
Конструкция try
-except
используется для обработки исключений. Код, который может вызвать исключение, помещается в блок try
, а обработка исключения — в блок except
.
Если пользователь введёт не число, сработает
ValueError
.Если пользователь введёт
0
, сработаетZeroDivisionError
.
Блок finally
Блок finally
выполняется всегда, независимо от того, произошло исключение или нет. Он используется для освобождения ресурсов (например, закрытия файлов).
Блок else
Блок else
выполняется, если в блоке try
не возникло исключений.
Создание собственных исключений
Вы можете создавать собственные исключения, наследуясь от класса Exception
.
Иерархия исключений
Все исключения в Python наследуются от базового класса BaseException
. Наиболее часто используемый класс — Exception
.
BaseException ├── SystemExit ├── KeyboardInterrupt ├── GeneratorExit └── Exception ├── ValueError ├── TypeError ├── ZeroDivisionError └── ...
Примеры обработки исключений
Пример 1: Обработка нескольких исключенийРекомендации
Не ловите все исключения без разбора: Это может скрыть реальные ошибки в коде.
Используйте конкретные исключения: Это делает код более читаемым и понятным.
Логируйте ошибки: Используйте модуль
logging
для записи ошибок в лог-файл.
Обработка ошибок и исключений — это важный механизм, который позволяет писать устойчивые и надёжные программы. Используйте try
-except
для обработки ожидаемых ошибок, finally
для освобождения ресурсов и создавайте собственные исключения для более точного управления ошибками. И конечно решайте задачи для лучшего усвоения теоретического материала!