Встроенные исключения

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

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

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

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

Поднимая (или повторно поднимая) исключение в except или finally клаузула __context__ автоматически установлено в последнее пойманное исключение; если новое исключение не будет обработано трейсбэк, который в конечном счете показан, то будет включать происходящее исключение (исключения) и заключительное исключение.

Поднимая новое исключение (вместо того, чтобы использовать голый raise, чтобы повторно поднять исключение, в настоящее время обрабатываемое), неявное исключение, контекст может быть добавлен с явной причиной при помощи from с raise:

raise new_exc from original_exc

Выражение, следующее за from, должно быть исключением или None. Он будет установлен как __cause__ для порожденного исключения. Установка __cause__ также неявно устанавливает __suppress_context__ атрибут True, так что использование raise new_exc from None эффективно заменяет старое исключение новым для отображения (например, преобразование KeyError в AttributeError), оставляя старое исключение доступным в __context__ для интроспекции при отладке.

Дефолт трейсбэк показывают код, показывает эти цепочечные исключения в дополнение к трейсбэк для самого исключения. Явное цепное исключение в __cause__ всегда отображается при наличии. Неявно цепочечное исключение в __context__ отображается только в том случае, если __cause__ имеет значение None, а __suppress_context__ - значение false.

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

Базовые классы

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

exception BaseException

Базовый класс для всех встроенных исключений. Это не должно быть напрямую наследуется пользовательскими классами (для этого используйте Exception). Если str() вызывается для экземпляра этого класса, представления возвращаются аргументы для экземпляра или пустая строка, если не было никаких аргументов.

args

Кортеж аргументов, заданных конструктору исключения. Некоторые встроенные исключения (например, OSError) ожидают определённого количества аргументов и присваивают особое значение элементам этого кортежа, в то время как другие обычно называются только с одним строка, дающим сообщение об ошибке.

with_traceback(tb)

Этот метод задает tb в качестве нового трейсбэк для исключения и возвращает объект исключения. Это обычно - используемый в обработке исключений код как это:

try:
    ...
except SomeException:
    tb = sys.exc_info()[2]
    raise OtherException(...).with_traceback(tb)
exception Exception

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

exception ArithmeticError

Базовый класс для встроенных исключений, которые возникают для различных арифметических ошибок: OverflowError, ZeroDivisionError, FloatingPointError.

exception BufferError

Поднимается при невозможности выполнения операции, связанной с buffer.

exception LookupError

Базовый класс для исключений, которые возникают, когда ключ или индекс используемый в сопоставлении или последовательности недопустимы: IndexError, KeyError. Это может быть поднято непосредственно codecs.lookup().

Конкретные исключения

Следующие исключения являются исключениями, которые обычно возникают

exception AssertionError

Возникает при сбое оператора assert.

exception AttributeError

Поднятый, когда ссылка атрибут (см. Ссылки на атрибуты) или назначение терпят неудачу. (Когда объект не поддерживает ссылки атрибут или назначения атрибут вообще, TypeError поднят.).

exception EOFError

Инициируется, когда функция input() попадает в состояние конца файла (EOF) без чтения каких-либо данных. (Н.Б.: методы io.IOBase.read() и io.IOBase.readline() возвращает пусты строка при попадании в EOF.)

exception FloatingPointError

В настоящее время не используемый.

exception GeneratorExit

Поднятый, когда генератор или корутина закрыты; см. generator.close() и coroutine.close(). Он непосредственно наследует от BaseException вместо Exception, так как технически не является ошибкой

exception ImportError

Поднятый, когда import инструкция испытывает затруднения при попытке загрузить модуль. Также возникает, когда «from list» в from ... import имеет имя, которое не может быть найдено.

name и path атрибуты могут быть установлены, используя ключевой-только аргументы конструктору. При установке они представляют имя импортируемого модуля и путь к любому файлу, вызвавшему исключение соответственно

Изменено в версии 3.3: Добавлены name и path атрибуты.

exception ModuleNotFoundError

Подкласс ImportError, который поднят import, когда модуль не мог быть расположен. Он также поднимается, когда None встречается в sys.modules.

Добавлено в версии 3.6.

exception IndexError

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

exception KeyError

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

exception KeyboardInterrupt

Возникает при нажатии пользователем клавиши прерывания (обычно Control-C или Delete). Во время выполнения регулярно производится проверка на наличие прерываний. Исключение наследуется от BaseException, чтобы не быть случайно пойманным код, который ловит Exception, и, таким образом, предотвратить выход интерпретатор.

exception MemoryError

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

exception NameError

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

exception NotImplementedError

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

Примечание

Не следует используемый указывать, что оператор или метод вообще не должен поддерживаться – в этом случае либо оставить оператор/метод неопределенным, либо, если подкласс, установить его в None.

Примечание

NotImplementedError и NotImplemented не являются взаимозаменяемыми, даже если они имеют схожие названия и цели. Подробнее о том, когда его использовать, см. раздел NotImplemented.

exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])

Это исключение возникает, когда системная функция возвращает системную ошибку, включая ошибки I/O, такие как «файл не найден» или «диск заполнен» (не для недопустимых типов аргументов или других случайных ошибок).

Вторая форма конструктора задает соответствующий атрибуты, описанный ниже. Дефолт атрибуты к None, если не определенный. Для обратной совместимости, если передано три аргумента, args атрибут содержит только 2-кортеж первых двух аргументов конструктора.

Конструктор часто фактически возвращает подкласс OSError, как описано в Исключения ОС ниже. Конкретный подкласс зависит от окончательного errno значение. Это поведение происходит только при построении OSError непосредственно или через алиас и не наследуется при подклассировании.

errno

Числовая ошибка код из C переменной errno.

winerror

В Windows это дает вам собственную ошибку Windows код. В этом случае errno атрибут является приблизительным переводом, в терминах POSIX, этой собственной ошибки код.

В соответствии с Windows, если аргумент конструктора winerror - целое число, errno атрибут определен от ошибки Windows код, и аргумент errno проигнорирован. На других платформах аргумент winerror игнорируется, а winerror атрибут не существует.

strerror

Соответствующее сообщение об ошибке, предоставляемое операционной системой. Он отформатирован функциями C, perror() в POSIX и FormatMessage() в Windows.

filename
filename2

Для исключений, связанных с путем файловой системы (например, open() или os.unlink()), filename - это имя файла, переданное функции. Для функций, включающих два пути файловой системы (например, os.rename()), filename2 соответствует второму имени файла, переданному функции.

Изменено в версии 3.3: EnvironmentError, IOError, WindowsError, socket.error, select.error и mmap.error были объединены в OSError, и конструктор может возвращает подкласс.

Изменено в версии 3.4: Теперь filename атрибут - это исходное имя файла, переданное функции, а не имя кодированный или декодированное из файловой системы кодировка. Кроме того, аргумент конструктора filename2 и атрибут были добавлены.

exception OverflowError

Возникает, когда результат арифметической операции слишком велик для представления. Это не может произойти для целых чисел (которые скорее поднимут MemoryError, чем откажутся). Однако по историческим причинам OverflowError иногда возникает для целых чисел, которые находятся вне требуемого диапазона. Из-за отсутствия стандартизации обработки исключений с плавающей запятой в C большинство операций с плавающей запятой не проверяются.

exception RecursionError

Это исключение является производным от RuntimeError. Он возникает, когда интерпретатор обнаруживает превышение максимальной глубины рекурсии (см. sys.getrecursionlimit()).

Добавлено в версии 3.5: Ранее был поднят равнинный RuntimeError.

exception ReferenceError

Это исключение поднято, когда слабое справочное полномочие, созданное функцией weakref.proxy(), является используемый, чтобы получить доступ к атрибут референта после того, как это был собранный мусор. Дополнительные сведения о слабых ссылках см. в модуле weakref.

exception RuntimeError

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

exception StopIteration

Поднятый встроенной функцией next() и метод :term:итератор __next__(), чтобы сигнализировать, что нет никаких дальнейших элементов, произведенных итератором.

Объект исключения имеет одно атрибут value, которое задается в качестве аргумента при построении исключения, и по умолчанию имеет значение None.

Когда вывод генератор функции или корутина, новый StopIteration сущность поднят, и значение возвращенныйby, функция - используемый как параметр value конструктору исключения.

Если генератор код прямо или косвенно вызывает StopIteration, он преобразуется в RuntimeError (сохраняя StopIteration в качестве причины нового исключения).

Изменено в версии 3.3: Добавлено value атрибут и возможность использования функций генератор для возвращает значение.

Изменено в версии 3.5: Представлено преобразование Runtime Error через from __future__ import generator_stop, см. раздел PEP 479.

Изменено в версии 3.7: Включить PEP 479 для всех код по умолчанию: ошибка StopIteration, возникшая в генератор, преобразуется в RuntimeError.

exception StopAsyncIteration

Должен быть поднят методом __anext__() объекта асинхронный итератор остановить повторение.

Добавлено в версии 3.5.

exception SyntaxError

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

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

exception IndentationError

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

exception TabError

Возникает, когда отступы содержат несогласованное использование вкладок и пробелов. Это подкласс IndentationError.

exception SystemError

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

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

exception SystemExit

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

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

code

Состояние выхода или сообщение об ошибке, переданное конструктору. (По умолчанию используется None.

exception TypeError

Возникает при применении операции или функции к объекту неподходящего типа. Связанный значение - это строка, содержащий сведения о несоответствии типов.

Это исключение может быть вызвано пользователем код, чтобы указать, что попытка операции над объектом не поддерживается и не должна быть. Если объект предназначен для поддержки данной операции, но еще не предоставил реализацию, NotImplementedError является правильным исключением, которое необходимо поднять.

Передача аргументов неправильного типа (например, передача list, когда ожидается int) должна привести к TypeError, но передача аргументов с неправильным значение (например, число вне ожидаемых границ) должна привести к ValueError.

exception UnboundLocalError

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

exception UnicodeError

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

UnicodeError имеет атрибуты, которые описывают ошибку кодировка или декодирования. Например, err.object[err.start:err.end] дает конкретный недопустимый вход, на котором произошел сбой кодировка.

encoding

Имя кодировк, вызвавшего ошибку.

reason

Строка, описывающий конкретную ошибку кодировка.

object

Объект, который кодировка пытается кодировать или декодировать.

start

Первый индекс недопустимых данных в object.

end

Индекс после последних недопустимых данных в object.

exception UnicodeEncodeError

Поднятый, когда Unicode-связанная ошибка происходит во время кодировка. Это подкласс UnicodeError.

exception UnicodeDecodeError

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

exception UnicodeTranslateError

Возникает при возникновении ошибки, связанной с юникодом, во время трансляции. Это подкласс UnicodeError.

exception ValueError

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

exception ZeroDivisionError

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

Для совместимости с предыдущими версиями сохраняются следующие исключения: начиная с Python 3.3, они являются псевдонимами OSError.

exception EnvironmentError
exception IOError
exception WindowsError

Доступно только в Windows.

Исключения ОС

Следующие исключения - подклассы OSError, они подняты в зависимости от системной ошибки код.

exception BlockingIOError

Возникает, когда операция блокирует объект (например, сокет), установленный для неблокирующей операции. Соответствует errno EAGAIN, EALREADY, EWOULDBLOCK и EINPROGRESS.

Помимо OSError, у BlockingIOError может быть еще один атрибут:

characters_written

Целое число, содержащее число символов, записанных в поток до блокировки. Этот атрибут доступен, используя буферизированные классы I/O от модуля io.

exception ChildProcessError

Возникает при сбое операции над дочерним процессом. Соответствует errno ECHILD.

exception ConnectionError

Базовый класс для проблем, связанных с подключением.

Подклассы - BrokenPipeError, ConnectionAbortedError, ConnectionRefusedError и ConnectionResetError.

exception BrokenPipeError

подкласс ConnectionError, возникающая при попытке записи на пайп, в то время как другой конец закрыт, или при попытке записи на сокет, которая была отключена для записи. Соответствует errno EPIPE и ESHUTDOWN.

exception ConnectionAbortedError

подкласс ConnectionError, возникающая, когда попытка подключения прерывается одноранговым узлом. Соответствует errno ECONNABORTED.

exception ConnectionRefusedError

подкласс ConnectionError, возникающая при отклонении попытки соединения одноранговым узлом. Соответствует errno ECONNREFUSED.

exception ConnectionResetError

подкласс ConnectionError, возникающая при сбросе соединения одноранговым узлом. Соответствует errno ECONNRESET.

exception FileExistsError

Возникает при попытке создания файла или каталога, который уже существует. Соответствует errno EEXIST.

exception FileNotFoundError

Возникает при запросе файла или каталога, но не существует. Соответствует errno ENOENT.

exception InterruptedError

Возникает, когда системный вызов прерывается входящим сигналом. Соответствует errno EINTR.

Изменено в версии 3.5: Python теперь повторяет системные вызовы, когда syscall прерван сигналом, кроме того, если обработчик сигнала поднимает исключение (см. PEP 475 для объяснения), вместо того, чтобы поднять InterruptedError.

exception IsADirectoryError

Возникает при запросе операции с файлом (например, os.remove()) в каталоге. Соответствует errno EISDIR.

exception NotADirectoryError

Возникает при запросе операции каталога (например, os.listdir()) для того, что не является каталогом. Соответствует errno ENOTDIR.

exception PermissionError

Возникает при попытке выполнения операции без соответствующих прав доступа, например разрешений файловой системы. Соответствует errno EACCES и EPERM.

exception ProcessLookupError

Возникает, когда данный процесс не существует. Соответствует errno ESRCH.

exception TimeoutError

Возникает при превышении времени ожидания системной функции на системном уровне. Соответствует errno ETIMEDOUT.

Добавлено в версии 3.3: Все вышеуказанные OSError подклассы были добавлены.

См.также

PEP 3151 - переработка иерархии исключений ОС и ввода-вывода

Предупреждения

Следующие исключения - используемый как предупреждение категорий; для получения дополнительной информации см. документацию по Категории предупреждений.

exception Warning

Базовый класс для категорий предупреждений.

exception UserWarning

Базовый класс для предупреждений, генерируемых пользователем код.

exception DeprecationWarning

Базовый класс для предупреждений об устаревших функциях, когда эти предупреждения предназначены для других разработчиков Python.

exception PendingDeprecationWarning

Базовый класс для предупреждений об устаревших элементах, которые, как ожидается, устареют в будущем, но не устарели в данный момент.

Этот класс редко - используемый, поскольку испускание предупреждения о возможном предстоящем осуждении необычно, и DeprecationWarning предпочтен для уже активных осуждений.

exception SyntaxWarning

Базовый класс для предупреждений о сомнительном синтаксисе.

exception RuntimeWarning

Базовый класс для предупреждений о сомнительном поведении во время выполнения.

exception FutureWarning

Базовый класс для предупреждений об устаревших функциях, когда эти предупреждения предназначены для конечных пользователей приложений, написанных на языке Python.

exception ImportWarning

Базовый класс для предупреждений о возможных ошибках при импорте модулей.

exception UnicodeWarning

Базовый класс для предупреждений, связанных с юникодом.

exception BytesWarning

Базовый класс для предупреждений, связанных с bytes и bytearray.

exception ResourceWarning

Базовый класс для предупреждений, связанных с использованием ресурсов. Игнорируется фильтрами предупреждений по умолчанию.

Добавлено в версии 3.2.

Иерархия исключения

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

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      |    +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning