Встроенные исключения¶
В 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
LookupError
¶ Базовый класс для исключений, которые возникают, когда ключ или индекс используемый в сопоставлении или последовательности недопустимы:
IndexError
,KeyError
. Это может быть поднято непосредственноcodecs.lookup()
.
Конкретные исключения¶
Следующие исключения являются исключениями, которые обычно возникают
-
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
¶ Объект, который кодировка пытается кодировать или декодировать.
-
-
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
может быть еще один атрибут:
-
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
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