Документация Python неофициальный перевод

Встроенные исключенияBuilt-in Exceptions

Исключения должны быть объектами классов. Исключения определяются в модуле exceptions. Этот модуль никогда не нужно импортировать явно: исключения доступны как во встроенном пространстве имён, так и в модуле exceptions.

Для исключений-классов в операторе try с предложением except, указывающим конкретный класс, это предложение обрабатывает также любые классы исключений, производные от этого класса (но не классы, от которых он производен). Два класса исключений, не связанные отношением наследования, никогда не эквивалентны, даже если имеют одинаковые имена.

Перечисленные ниже встроенные исключения могут порождаться интерпретатором или встроенными функциями. Если не указано иное, они имеют «связанное значение», указывающее на подробную причину ошибки. Это может быть строка или кортеж, содержащий несколько элементов информации (например, код ошибки и строку с её пояснением). Связанное значение – это второй аргумент оператора raise. Если класс исключения происходит от стандартного корневого класса BaseException, связанное значение хранится в атрибуте args экземпляра исключения.

Пользовательский код может возбуждать встроенные исключения. Это можно использовать для проверки обработчика исключений или для сообщения об ошибке «точно так же», как если бы интерпретатор возбудил то же самое исключение; однако следует помнить, что ничто не мешает пользовательскому коду возбудить неподходящую ошибку.

Встроенные классы исключений можно наследовать для определения новых исключений; программистам рекомендуется, по крайней мере, выводить новые исключения из класса Exception, а не BaseException. Дополнительную информацию об определении исключений можно найти в учебнике Python в разделе Пользовательские исключения.

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

exception BaseException
Базовый класс для всех встроенных исключений. Он не предназначен для непосредственного наследования пользовательскими классами (для этого используйте Exception). Если str() или unicode() вызывается для экземпляра этого класса, возвращается строковое представление его аргумента (или аргументов), либо пустая строка, если аргументов не было. Все аргументы хранятся в args в виде кортежа.
exception Exception
Все встроенные исключения, не приводящие к завершению системы, являются производными от этого класса. Все определённые пользователем исключения также должны наследоваться от этого класса.
exception ArithmeticError
Базовый класс для тех встроенных исключений, которые возбуждаются при различных арифметических ошибках: OverflowError, ZeroDivisionError, FloatingPointError.
exception LookupError
Базовый класс для исключений, которые возникают при неверном ключе или индексе, используемом в отображении или последовательности: IndexError, KeyError. Может также возбуждаться напрямую функцией sys.setdefaultencoding().
exception EnvironmentError

Базовый класс для исключений, которые могут возникать вне системы Python: IOError, OSError. Когда исключения этого типа создаются с кортежем из 2 элементов, первый элемент доступен через атрибут errno экземпляра (предполагается, что это номер ошибки), а второй элемент – через атрибут strerror (обычно это соответствующее сообщение об ошибке). Сам кортеж также доступен через атрибут args.

Когда исключение EnvironmentError создаётся с кортежем из трёх элементов, первые два элемента доступны, как описано выше, а третий элемент – в атрибуте filename. Однако для обратной совместимости атрибут args содержит только кортеж из двух первых аргументов конструктора.

Атрибут filename равен None, когда это исключение создано с количеством аргументов, отличным от 3. Атрибуты errno и strerror также равны None, когда экземпляр был создан с количеством аргументов, отличным от 2 или 3. В последнем случае args содержит аргументы конструктора как есть в виде кортежа.

Следующие исключения – это те, которые действительно возбуждаются.

exception AssertionError

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

exception AttributeError
Возбуждается, когда обращение к атрибуту (см. Обращения к атрибутам) или присваивание атрибута завершается неудачей. (Если объект вообще не поддерживает обращение к атрибутам или их присваивание, возбуждается TypeError.)
exception EOFError
Возбуждается, когда одна из встроенных функций (input() или raw_input()) достигает конца файла (EOF), не прочитав ни одного байта. (Примечание: методы file.read() и file.readline() возвращают пустую строку при достижении EOF.)
exception FloatingPointError
Возбуждается при сбое операции с плавающей запятой. Это исключение всегда определено, но может быть возбуждено только если Python сконфигурирован с опцией --with-fpectl, или в файле pyconfig.h определён символ WANT_SIGFPE_HANDLER.
exception GeneratorExit
Возбуждается при вызове метода close() у генератора. Он напрямую наследуется от BaseException, а не от Exception, поскольку технически не является ошибкой.
exception IOError

Возбуждается, когда операция ввода-вывода (например, встроенные функции print() или open(), либо метод файлового объекта) завершается неудачей по причине, связанной с вводом-выводом, например, «файл не найден» или «диск переполнен».

Этот класс является производным от EnvironmentError. См. обсуждение выше для получения дополнительной информации об атрибутах экземпляров исключений.

exception ImportError
Возбуждается, когда инструкция import не может найти определение модуля, или когда конструкция from ... import не может найти имя, которое должно быть импортировано.
exception IndexError
Вызывается, когда индекс последовательности выходит за пределы диапазона. (Индексы срезов молча усекаются до допустимого диапазона; если индекс не является целым числом, вызывается TypeError.)
exception KeyError
Вызывается, когда ключ отображения (словаря) не найден среди существующих ключей.
exception KeyboardInterrupt
Вызывается, когда пользователь нажимает клавишу прерывания (обычно Control-C или Delete). Во время выполнения регулярно проверяется наличие прерываний. Исключение наследуется от BaseException, чтобы случайно не быть перехваченным кодом, который ловит Exception, и тем самым не помешать выходу интерпретатора.
exception MemoryError
Возбуждается, когда у операции заканчивается память, но ситуацию всё ещё можно исправить (удалив некоторые объекты). Связанное значение – строка, указывающая, какая именно (внутренняя) операция исчерпала память. Обратите внимание: из-за лежащей в основе архитектуры управления памятью (функция C malloc) интерпретатор может не всегда полностью восстановиться после такой ситуации; тем не менее он возбуждает исключение, чтобы можно было вывести трассировку стека на случай, если причиной была вышедшая из-под контроля программа.
exception NameError
Вызывается, когда не найдено локальное или глобальное имя. Это относится только к неквалифицированным именам. Связанное значение – сообщение об ошибке, которое включает имя, которое не удалось найти.
exception NotImplementedError
Это исключение происходит от RuntimeError. В пользовательских базовых классах абстрактные методы должны вызывать это исключение, когда они требуют от производных классов переопределить метод.
exception OSError

Это исключение является производным от EnvironmentError. Оно возбуждается, когда функция возвращает системную ошибку (не для недопустимых типов аргументов или прочих случайных ошибок). Атрибут errno – числовой код ошибки из модуля errno, а атрибут strerror – соответствующая строка, которая была бы выведена функцией C perror. Смотрите модуль errno, который содержит имена для кодов ошибок, определённых базовой операционной системой.

Для исключений, связанных с путём файловой системы (например, chdir() или unlink()), экземпляр исключения будет содержать третий атрибут, filename, который является именем файла, переданным функции.

exception OverflowError
Возбуждается, когда результат арифметической операции слишком велик для представления. Это не может произойти для целых чисел (которые скорее возбудят MemoryError, чем сдадутся). Из-за отсутствия стандартизации обработки исключений с плавающей запятой в C большинство операций с плавающей запятой также не проверяются.
exception ReferenceError
Это исключение вызывается, когда прокси слабой ссылки, созданный функцией weakref.proxy(), используется для доступа к атрибуту объекта после его сборки мусора. Для получения дополнительной информации о слабых ссылках см. модуль weakref.
exception RuntimeError
Возникает, когда обнаружена ошибка, не подпадающая ни под одну из других категорий. Связанное значение – это строка, указывающая, что именно пошло не так. (Это исключение в основном является пережитком предыдущей версии интерпретатора; сейчас оно используется нечасто.)
exception StopIteration
Возбуждается встроенной next() и итератора __next__() методом для сигнализации о том, что значений больше нет.
exception SyntaxError

Возбуждается, когда синтаксический анализатор обнаруживает синтаксическую ошибку. Это может произойти в операторе import, при вызове встроенных функций exec() или eval(), а также при чтении начального скрипта или стандартного ввода (в том числе в интерактивном режиме).

Экземпляры этого класса имеют атрибуты filename, lineno, offset и text для удобного доступа к подробностям. str() от экземпляра исключения возвращает только сообщение.

exception SystemError

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

Сообщите об этом автору или сопровождающему вашего интерпретатора Python. Обязательно укажите версию интерпретатора Python (sys.version; она также выводится в начале интерактивного сеанса Python), точное сообщение об ошибке (связанное значение исключения) и, если возможно, исходный код программы, вызвавшей ошибку.

exception SystemExit

Это исключение вызывается функцией sys.exit(). Если его не обработать, интерпретатор Python завершает работу; стек вызовов не печатается. Если связанное значение – целое число, оно задает код завершения системы (передаётся в функцию exit в C); если это None, код завершения равен нулю; если оно другого типа (например, строка), значение объекта выводится, а код завершения равен единице.

Экземпляры имеют атрибут code, который устанавливается в предлагаемый статус выхода или сообщение об ошибке (по умолчанию None). Кроме того, это исключение наследуется напрямую от BaseException, а не от Exception, поскольку технически не является ошибкой.

Вызов sys.exit() преобразуется в исключение, чтобы обработчики очистки (предложения finally операторов try) могли выполниться, и чтобы отладчик мог выполнить сценарий, не рискуя потерять управление. Функцию os._exit() можно использовать, если абсолютно необходимо выйти немедленно (например, в дочернем процессе после вызова fork()).

Исключение наследуется от BaseException, а не от Exception, чтобы оно случайно не перехватывалось кодом, который ловит Exception. Это позволяет исключению правильно всплывать и приводить к завершению интерпретатора.

exception TypeError
Вызывается, когда операция или функция применяется к объекту неподходящего типа. Связанное значение – строка с подробностями о несоответствии типов.
exception UnboundLocalError
Возбуждается при обращении к локальной переменной в функции или методе, которой не присвоено значение. Является подклассом NameError.
exception UnicodeError
Возбуждается при возникновении ошибки кодирования или декодирования, связанной с Unicode. Является подклассом ValueError.
exception UnicodeEncodeError
Возникает при ошибке, связанной с Unicode, во время кодирования. Является подклассом UnicodeError.
exception UnicodeDecodeError
Возникает при ошибке, связанной с Unicode, во время декодирования. Является подклассом UnicodeError.
exception UnicodeTranslateError
Возникает при ошибке, связанной с Unicode, во время трансляции. Является подклассом UnicodeError.
exception ValueError
Возникает, когда встроенная операция или функция получает аргумент правильного типа, но с неподходящим значением, и эта ситуация не описывается более точным исключением, например IndexError.
exception WindowsError
Возникает, когда происходит ошибка, специфичная для Windows, или когда номер ошибки не соответствует значению errno. Значения winerror и strerror создаются из возвращаемых значений функций GetLastError и FormatMessage из Windows Platform API. Значение errno отображает значение winerror на соответствующие значения errno.h. Это подкласс OSError.
exception ZeroDivisionError
Вызывается, когда второй аргумент операции деления или взятия остатка равен нулю. Связанное значение – строка, указывающая тип операндов и операцию.

Следующие исключения используются в качестве категорий предупреждений; подробнее см. в модуле warnings.

exception Warning
Базовый класс для категорий предупреждений.
exception UserWarning
Базовый класс для предупреждений, генерируемых пользовательским кодом.
exception DeprecationWarning
Базовый класс для предупреждений об устаревших возможностях.
exception PendingDeprecationWarning
Базовый класс для предупреждений о возможностях, которые будут признаны устаревшими в будущем.
exception SyntaxWarning
Базовый класс для предупреждений о сомнительном синтаксисе.
exception RuntimeWarning
Базовый класс для предупреждений о сомнительном поведении во время выполнения.
exception FutureWarning
Базовый класс для предупреждений о конструкциях, которые в будущем изменят семантику.
exception ImportWarning
Базовый класс для предупреждений о возможных ошибках при импорте модулей.
exception UnicodeWarning
Базовый класс для предупреждений, связанных с Unicode.
exception BytesWarning
Базовый класс для предупреждений, связанных с bytes и buffer.

Иерархия классов для встроенных исключений:

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EnvironmentError
      |    +-- IOError
      |    +-- OSError
      |         +-- WindowsError (Windows)
      |         +-- VMSError (VMS)
      +-- EOFError
      +-- ImportError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning