Исключение — это неожиданное событие, которое происходит во время выполнения программы. Например:
1 |
divide_by_zero = 7 / 0 |
Эта строка вызовет исключение, поскольку делить на 0 нельзя.
Логические ошибки (исключения) в Python
Ошибки, возникающие во время выполнения программы (после прохождения синтаксической проверки), называются исключениями или логическими ошибками.
Например, они возникают, когда мы:
пытаемся открыть несуществующий файл — генерируется исключение FileNotFoundError
;
пытаемся делить на ноль — генерируется исключение ZeroDivisionError
;
пытаемся импортировать несуществующий модуль — генерируется исключение ImportError
.
При возникновении подобных ошибок во время выполнения Python создает объект исключения.
Если ошибка не была обработана должным образом, выводится информация об этой ошибки вместе с некоторыми подробностями о том, почему она произошла.
Давайте посмотрим, как Python обрабатывает подобные ошибки:
1 2 |
divide_numbers = 7 / 0 print(divide_numbers) |
Результат:
Traceback (most recent call last):
File "<string>", line 1, in <module>
ZeroDivisionError: division by zero
Здесь, при попытке выполнения операции 7 / 0
, программа выбрасывает исключение ZeroDivisionError
.
Встроенные исключения в Python
Некорректные операции могут вызывать исключения. В Python существует множество встроенных исключений, которые вызываются при возникновении соответствующих ошибок.
Мы можем просмотреть все встроенные исключения с помощью функции local() следующим образом:
1 |
print(dir(locals()['__builtins__'])) |
Здесь locals()['__builtins__']
вернет модуль встроенных исключений, функций и атрибутов, а dir
позволяет перечислить эти атрибуты в виде строк.
Ниже перечислены некоторые из наиболее распространенных встроенных исключений в Python, а также ошибки, которые их вызывают:
Исключение | Причина |
AssertionError | Возникает, когда оператор assert не срабатывает. |
AttributeError | Возникает при ошибке присваивания атрибута или ссылки. |
EOFError | Возникает, когда функция input() достигает состояния конца файла. |
FloatingPointError | Возникает при сбое операции с данными типа с плавающей точкой. |
ImportError | Возникает, если импортируемый модуль не найден. |
IndexError | Возникает, когда указанный индекс в последовательности выходит за пределы допустимого диапазона. |
KeyError | Возникает, когда ключ не найден в словаре. |
KeyboardInterrupt | Возникает, когда пользователь нажимает клавишу прерывания (Ctrl+C или Delete). |
MemoryError | Возникает, когда заканчивается память для выполнения операции. |
NameError | Возникает, когда переменная не найдена в локальной или глобальной области видимости. |
NotImplementedError | Возникает при использовании абстрактных методов. |
OSError | Возникает, когда работа системы вызывает ошибку, связанную с системой. |
OverflowError | Возникает, когда результат арифметической операции слишком велик для представления. |
RuntimeError | Возникает, когда ошибка не подпадает ни под одну другую категорию. |
StopIteration | Вызывается функцией next(), чтобы указать, что нет следующего элемента, который должен быть возвращен итератором. |
SyntaxError | Вызывается синтаксическим парсером при обнаружении синтаксической ошибки. |
IndentationError | Возникает при неправильном отступе. |
TabError | Возникает, когда отступ состоит из непоследовательных табуляций и пробелов. |
SystemError | Возникает, когда интерпретатор обнаруживает внутреннюю ошибку. |
SystemExit | Вызывается функцией sys.exit(). |
TypeError | Возникает, когда функция или операция применяется к объекту неправильного типа. |
UnboundLocalError | Возникает, когда в функции или методе делается ссылка на локальную переменную, но значение не было привязано к этой переменной. |
UnicodeError | Возникает при возникновении ошибки кодирования или декодирования, связанной с Unicode. |
UnicodeEncodeError | Возникает, когда во время кодирования происходит ошибка, связанная с Unicode. |
UnicodeDecodeError | Возникает, когда во время декодирования происходит ошибка, связанная с Unicode. |
UnicodeTranslateError | Возникает при ошибке, связанной с Unicode, во время перевода. |
ValueError | Возникает, когда функция получает аргумент правильного типа, но некорректное значение (для этого типа). |
ZeroDivisionError | Возникает, когда второй операнд операции деления или модуляции равен нулю. |
При необходимости мы также можем определить собственные исключения. Для работы с исключениями в Python используются операторы try
, except
и finally
.
Ошибки и исключения в Python
Ошибками обычно являются ошибки компиляции, синтаксические ошибки, ошибки в логической части кода, несовместимость библиотек, бесконечная рекурсия и т.д.
Исключения могут быть пойманы и обработаны программой.