Исключения Python

Исключение — это непредвиденное событие, которое возникает во время выполнения программы. Например,

divide_by_zero = 7 / 0

Приведённый выше код вызывает исключение, так как невозможно разделить число на 0.

Давайте подробно изучим исключения Python.


Логические ошибки Python (исключения)

Ошибки, возникающие во время выполнения (после прохождения теста синтаксиса), называются исключениями или логическими ошибками.

Например, они возникают, когда мы

  • пытаемся открыть файл (для чтения), который не существует (FileNotFoundError)

  • пытаемся разделить число на ноль (ZeroDivisionError)

  • пытаемся импортировать модуль, который не существует (ImportError) и так далее.

Всякий раз, когда возникают такого рода ошибки времени выполнения, Python создаёт объект исключения.

Если он не обработан должным образом, выводится трассировка этой ошибки вместе с некоторыми подробностями о причине её возникновения.

Посмотрим, как Python обрабатывает эти ошибки:

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() следующим образом:

print(dir(locals()['__builtins__']))

Здесь locals()['__builtins__'] вернёт модуль встроенных исключений, функций и атрибутов, а dir позволяет нам перечислить эти атрибуты в виде строк.

Некоторые из распространённых встроенных исключений в программировании на Python вместе с ошибками, которые их вызывают, перечислены ниже:

Исключение

Причина ошибки

AssertionError

Возникает, когда инструкция assert завершается неудачно.

AttributeError

Возникает, когда не удаётся присвоить атрибут или обратиться к нему.

EOFError

Возникает, когда функция input() достигает состояния конца файла.

FloatingPointError

Возникает при сбое операции с плавающей точкой.

GeneratorExit

Возникает при вызове метода close() генератора.

ImportError

Возникает, когда импортированный модуль не найден.

IndexError

Возникает, когда индекс последовательности находится вне диапазона.

KeyError

Возникает, когда ключ не найден в словаре.

KeyboardInterrupt

Возникает, когда пользователь нажимает клавишу прерывания (Ctrl+C или Delete).

MemoryError

Возникает, когда операции не хватает памяти.

NameError

Возникает, когда переменная не найдена в локальной или глобальной области видимости.

NotImplementedError

Вызывается абстрактными методами.

OSError

Возникает, когда системная операция вызывает ошибку, связанную с системой.

OverflowError

Возникает, когда результат арифметической операции слишком велик для представления.

ReferenceError

Возникает, когда слабая ссылка используется для доступа к объекту, собранному сборщиком мусора.

RuntimeError

Возникает, когда ошибка не попадает ни в одну из других категорий.

StopIteration

Возникает при вызове функции next() для указания, что итератор больше не может вернуть элементов.

SyntaxError

Возникает при обнаружении синтаксической ошибки парсером.

IndentationError

Возникает при неправильном отступе.

TabError

Возникает, когда отступы состоят из несогласованных табуляций и пробелов.

SystemError

Возникает, когда интерпретатор обнаруживает внутреннюю ошибку.

SystemExit

Возникает при вызове функции sys.exit().

TypeError

Возникает, когда функция или операция применяется к объекту неправильного типа.

UnboundLocalError

Возникает, когда делается ссылка на локальную переменную в функции или методе, но этой переменной не было присвоено значение.

UnicodeError

Возникает при ошибке кодирования или декодирования, связанной с Unicode.

UnicodeEncodeError

Возникает при ошибке кодирования, связанной с Unicode.

UnicodeDecodeError

Возникает при ошибке декодирования, связанной с Unicode.

UnicodeTranslateError

Возникает при ошибке перевода, связанной с Unicode.

ValueError

Возникает, когда функция получает аргумент правильного типа, но неподходящего значения.

ZeroDivisionError

Возникает, когда второй операнд операции деления или взятия остатка равен нулю.

При необходимости мы также можем определить собственные исключения в Python. Чтобы узнать о них больше, посетите Пользовательские исключения Python.

Мы можем обрабатывать эти встроенные и пользовательские исключения в Python с помощью инструкций try, except и finally. Чтобы узнать о них больше, посетите Инструкции try, except и finally Python.


Ошибка и исключение в Python

Ошибки представляют такие условия, как ошибка компиляции, синтаксическая ошибка, ошибка в логической части кода, несовместимость библиотек, бесконечная рекурсия и т. д.

Ошибки обычно находятся вне контроля программиста, и мы не должны пытаться обрабатывать ошибки.

Исключения могут быть пойманы и обработаны программой.

Теперь, когда мы знаем об исключениях, в следующем уроке мы узнаем об обработке исключений.


Видео: обработка исключений Python