Встроенные исключения
В Python все исключения должны быть экземплярами класса, производного от BaseException. В инструкции try с предложением except, в котором упоминается определённый класс, это предложение также обрабатывает любые классы исключений, производные от этого класса (но не классы исключений, от которых он производен). Два класса исключений, не связанных наследованием, никогда не эквивалентны, даже если у них одинаковое имя.
Перечисленные в этой главе встроенные исключения могут быть сгенерированы интерпретатором или встроенными функциями. Если не указано иное, у них есть «связанное значение», указывающее подробную причину ошибки. Это может быть строка или кортеж из нескольких элементов с информацией (например, код ошибки и строка с описанием этого кода). Связанное значение обычно передаётся в качестве аргументов конструктору класса исключения.
Пользовательский код может возбуждать встроенные исключения. Это можно использовать для проверки обработчика исключений или для сообщения об ошибке «точно так же», как в ситуации, когда интерпретатор возбуждает то же исключение; однако следует помнить, что ничто не мешает пользовательскому коду возбуждать неподходящее исключение.
От встроенных классов исключений можно наследовать, чтобы определять новые исключения; разработчикам рекомендуется наследовать новые исключения от класса Exception или одного из его подклассов, а не от BaseException. Дополнительные сведения об определении исключений приведены в руководстве по Python в разделе Пользовательские исключения.
Контекст исключения
Три атрибута объектов исключений предоставляют информацию о контексте, в котором было возбуждено исключение:
-
BaseException.__context__ -
BaseException.__cause__ -
BaseException.__suppress_context__ -
При возбуждении нового исключения во время обработки другого исключения атрибут
__context__нового исключения автоматически устанавливается в значение обрабатываемого исключения. Исключение может обрабатываться при использовании предложенияexceptилиfinally, либо инструкцииwith.Этот неявный контекст исключения можно дополнить явной причиной, используя
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.В обоих случаях само исключение всегда отображается после всех связанных исключений, чтобы последняя строка трассировки стека всегда показывала последнее возбужденное исключение.
Наследование от встроенных исключений
Пользовательский код может создавать подклассы, наследующие тип исключения. Рекомендуется наследовать только от одного типа исключения за раз, чтобы избежать возможных конфликтов при обработке базовыми классами атрибута args, а также возможной несовместимости компоновки памяти.
Особенность реализации CPython: Большинство встроенных исключений реализованы на C для повышения эффективности; см. Objects/exceptions.c. Некоторые из них имеют специальную компоновку памяти, из-за чего невозможно создать подкласс, наследующий сразу от нескольких типов исключений. Компоновка памяти типа является особенностью реализации и может изменяться между версиями Python, что может привести к новым конфликтам в будущем. Поэтому рекомендуется вообще избегать множественного наследования от типов исключений.
Базовые классы
Следующие исключения используются преимущественно как базовые классы для других исключений.
-
exception BaseException -
Базовый класс для всех встроенных исключений. Он не предназначен для прямого наследования в пользовательских классах (для этого используйте
Exception). Если вызватьstr()для экземпляра этого класса, будет возвращено представление аргумента или аргументов экземпляра либо пустая строка, если аргументов не было.-
args -
Кортеж аргументов, переданных конструктору исключения. Некоторые встроенные исключения (например,
OSError) ожидают определённое количество аргументов и придают элементам этого кортежа особый смысл, тогда как другие обычно вызываются только с одной строкой, содержащей сообщение об ошибке.
-
with_traceback(tb) -
Этот метод устанавливает tb в качестве новой трассировки стека для исключения и возвращает объект исключения. До появления возможностей связывания исключений в PEP 3134 он использовался чаще. В следующем примере показано, как преобразовать экземпляр
SomeExceptionв экземплярOtherException, сохранив трассировку стека. После возбуждения текущий кадр добавляется в трассировку стекаOtherException, как это произошло бы с трассировкой исходногоSomeException, если бы мы позволили ему распространиться к вызывающему коду.try: ... except SomeException: tb = sys.exception().__traceback__ raise OtherException(...).with_traceback(tb)
-
__traceback__ -
Изменяемое поле, содержащее связанный с этим исключением объект трассировки стека. См. также: Инструкция raise.
-
add_note(note) -
Добавляет строку
noteк примечаниям исключения, которые отображаются в стандартной трассировке стека после строки исключения. Еслиnoteне является строкой, возбуждается исключениеTypeError.Добавлено в версии 3.11.
-
__notes__ -
Список примечаний этого исключения, добавленных с помощью
add_note(). Этот атрибут создаётся при вызовеadd_note().Добавлено в версии 3.11.
-
-
exception Exception -
От этого класса производны все встроенные исключения, не завершающие работу системы. От этого класса также должны наследоваться все пользовательские исключения.
-
exception ArithmeticError -
Базовый класс для встроенных исключений, возбуждаемых при различных арифметических ошибках:
OverflowError,ZeroDivisionError,FloatingPointError.
-
exception BufferError -
Возбуждается, когда операцию, связанную с буфером, невозможно выполнить.
-
exception LookupError -
Базовый класс для исключений, возбуждаемых, когда ключ или индекс, используемый в отображении или последовательности, недопустим:
IndexError,KeyError. Это исключение может быть возбуждено непосредственно функциейcodecs.lookup().
Конкретные исключения
Следующие исключения возникают чаще всего.
-
exception AssertionError -
Возникает, когда инструкция
assertзавершается неудачно.
-
exception AttributeError -
Возникает, когда не удаётся получить ссылку на атрибут (см. Ссылки на атрибуты) или присвоить ему значение. (Если объект вообще не поддерживает ссылки на атрибуты или присваивание атрибутам, возникает исключение
TypeError.)Необязательные аргументы, доступные только по ключевому слову, name и obj задают соответствующие атрибуты:
-
name -
Имя атрибута, к которому была предпринята попытка доступа.
-
obj -
Объект, к атрибуту которого пытались получить доступ.
-
-
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» вfrom ... importуказано имя, которое не удаётся найти.Необязательные аргументы, доступные только по ключевому слову, name и path задают соответствующие атрибуты:
-
name -
Имя модуля, который пытались импортировать.
-
path -
Путь к файлу, вызвавшему исключение.
-
-
exception ModuleNotFoundError -
Подкласс
ImportError, который возникает при выполненииimport, если модуль не удалось найти. Также возникает, еслиNoneобнаруживается вsys.modules.Добавлено в версии 3.6.
-
exception IndexError -
Возникает, когда индекс последовательности находится вне допустимого диапазона. (Индексы срезов автоматически ограничиваются допустимым диапазоном; если индекс не является целым числом, возникает исключение
TypeError.)
-
exception KeyError -
Возникает, когда ключ отображения (словаря) отсутствует среди имеющихся ключей.
-
exception KeyboardInterrupt -
Возникает, когда пользователь нажимает клавишу прерывания (обычно Control-C или Delete). Во время выполнения регулярно проверяется наличие прерываний. Исключение наследуется от
BaseException, чтобы его случайно не перехватил код, перехватывающийException, и тем самым не помешал завершению интерпретатора.Примечание
Перехват
KeyboardInterruptтребует особого внимания. Поскольку это исключение может возникнуть в непредсказуемый момент, при некоторых обстоятельствах оно может оставить выполняющуюся программу в несогласованном состоянии. Как правило, лучше позволитьKeyboardInterruptкак можно быстрее завершить программу или вовсе не допускать его возникновения. (См. Примечание об обработчиках сигналов и исключениях.)
-
exception MemoryError -
Возникает, когда операция исчерпывает память, но ситуацию ещё можно исправить (удалив некоторые объекты). Связанное значение — строка, указывающая, при выполнении какой (внутренней) операции закончилась память. Обратите внимание, что из-за лежащей в основе архитектуры управления памятью (функции
malloc()в C) интерпретатор не всегда может полностью восстановиться после такой ситуации; тем не менее он вызывает исключение, чтобы можно было напечатать трассировку стека на случай, если причиной стала вышедшая из-под контроля программа.
-
exception NameError -
Возникает, когда локальное или глобальное имя не найдено. Это относится только к неквалифицированным именам. Связанное значение — сообщение об ошибке с именем, которое не удалось найти.
Необязательный аргумент name, доступный только по ключевому слову, задаёт атрибут:
-
name -
Имя переменной, к которой пытались получить доступ.
Изменено в версии 3.10: Добавлен атрибут
name. -
-
exception NotImplementedError -
Это исключение является производным от
RuntimeError. В базовых классах, определённых пользователем, абстрактные методы должны вызывать это исключение, если они требуют, чтобы производные классы переопределили метод, либо пока класс находится в разработке, чтобы указать, что настоящую реализацию ещё нужно добавить.Примечание
Его не следует использовать для указания на то, что оператор или метод вообще не поддерживается: в таком случае оператор или метод нужно либо не определять, либо, если речь о подклассе, присвоить ему значение
None.Предупреждение
NotImplementedErrorиNotImplemented— не одно и то же. Это исключение следует использовать только описанным выше образом; сведения о правильном использовании встроенной константы см. в разделеNotImplemented.
-
exception OSError([arg]) - exception OSError(errno, strerror[, filename[, winerror[, filename2]]])
-
Это исключение возникает, когда системная функция возвращает ошибку, связанную с системой, включая ошибки ввода-вывода, такие как «файл не найден» или «диск переполнен» (но не при передаче аргументов недопустимого типа или других сопутствующих ошибках).
Вторая форма конструктора задаёт соответствующие атрибуты, описанные ниже. Если атрибуты не указаны, по умолчанию им присваивается значение
None. Для обратной совместимости, если переданы три аргумента, атрибутargsсодержит только кортеж из двух первых аргументов конструктора.Конструктор часто фактически возвращает подкласс
OSError, как описано ниже в разделе Исключения ОС. Конкретный подкласс зависит от итогового значенияerrno. Такое поведение возникает только при непосредственном созданииOSErrorили через псевдоним и не наследуется при создании подклассов.-
errno -
Числовой код ошибки из переменной C
errno.
-
winerror -
В Windows этот атрибут содержит собственный код ошибки Windows. Атрибут
errnoв таком случае содержит приблизительное соответствие этого собственного кода ошибки в терминах POSIX.В Windows, если аргумент конструктора winerror является целым числом, атрибут
errnoопределяется по коду ошибки Windows, а аргумент errno игнорируется. На других платформах аргумент winerror игнорируется, а атрибутwinerrorотсутствует.
-
strerror -
Соответствующее сообщение об ошибке, предоставленное операционной системой. В POSIX оно форматируется функциями C
perror(), а в Windows —FormatMessage().
-
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 PythonFinalizationError -
Это исключение является производным от
RuntimeError. Оно возникает, когда операция блокируется во время завершения работы интерпретатора, также известного как финализация Python.Примеры операций, которые могут быть заблокированы с возникновением
PythonFinalizationErrorво время финализации Python:- Создание нового потока Python.
-
os.fork().
См. также функцию
sys.is_finalizing().Добавлено в версии 3.13: Ранее возникало обычное исключение
RuntimeError.
-
exception RecursionError -
Это исключение является производным от
RuntimeError. Оно возникает, когда интерпретатор обнаруживает превышение максимальной глубины рекурсии (см.sys.getrecursionlimit()).Добавлено в версии 3.5: Ранее возникало обычное исключение
RuntimeError.
-
exception ReferenceError -
Это исключение возникает, когда прокси слабой ссылки, созданный функцией
weakref.proxy(), используется для доступа к атрибуту референта после его удаления сборщиком мусора. Дополнительные сведения о слабых ссылках см. в модулеweakref.
-
exception RuntimeError -
Возникает, когда обнаруженная ошибка не относится ни к одной из других категорий. Связанное значение — строка, точно указывающая, что пошло не так.
-
exception StopIteration -
Возникает во встроенной функции
next()и методе__next__()итератора, чтобы сообщить об отсутствии следующих элементов, которые может выдать итератор.-
value -
Объект исключения имеет единственный атрибут
value, который задаётся аргументом при создании исключения и по умолчанию равенNone.
Когда функция генератора или сопрограммы возвращает управление, возникает новый экземпляр
StopIteration, а возвращённое функцией значение используется как параметрvalueконструктора исключения.Если код генератора прямо или косвенно вызывает
StopIteration, оно преобразуется вRuntimeError(при этомStopIterationсохраняется как причина нового исключения).Изменено в версии 3.3: Добавлен атрибут
valueи возможность использовать его в функциях-генераторах для возврата значения.Изменено в версии 3.5: Добавлено преобразование в RuntimeError через
from __future__ import generator_stop; см. PEP 479.Изменено в версии 3.7: Применение PEP 479 включено по умолчанию для всего кода: исключение
StopIteration, возникшее в генераторе, преобразуется вRuntimeError. -
-
exception StopAsyncIteration -
Метод
__anext__()объекта асинхронного итератора должен вызывать это исключение, чтобы остановить итерацию.Добавлено в версии 3.5.
-
exception SyntaxError(message, details) -
Возникает, когда парсер обнаруживает синтаксическую ошибку. Она может появиться в инструкции
import, при вызове встроенных функцийcompile(),exec()илиeval(), а также при чтении начального скрипта или стандартного ввода (в том числе в интерактивном режиме).str()экземпляра исключения возвращает только сообщение об ошибке. Подробные сведения представлены кортежем, элементы которого также доступны в виде отдельных атрибутов.-
filename -
Имя файла, в котором произошла синтаксическая ошибка.
-
lineno -
Номер строки файла, в которой произошла ошибка. Отсчёт начинается с 1: номер
linenoпервой строки файла равен 1.
-
offset -
Номер столбца в строке, в котором произошла ошибка. Отсчёт начинается с 1: номер
offsetпервого символа строки равен 1.
-
text -
Текст исходного кода, содержащий ошибку.
-
end_lineno -
Номер строки файла, в которой заканчивается фрагмент с ошибкой. Отсчёт начинается с 1: номер
linenoпервой строки файла равен 1.
-
end_offset -
Номер столбца в последней строке, на котором заканчивается фрагмент с ошибкой. Отсчёт начинается с 1: номер
offsetпервого символа строки равен 1.
Для ошибок в полях f-строки к сообщению добавляется префикс «f-string: », а смещения отсчитываются в тексте, сформированном из выражения замены. Например, компиляция f’Bad {a b} field’ приводит к следующему значению атрибута args: (‘f-string: …’, (‘’, 1, 2, ‘(a b)n’, 1, 5)).
Изменено в версии 3.10: Добавлены атрибуты
end_linenoиend_offset. -
-
exception IndentationError -
Базовый класс для синтаксических ошибок, связанных с неправильными отступами. Это подкласс
SyntaxError.
-
exception TabError -
Возникает, когда в отступах непоследовательно используются табуляции и пробелы. Это подкласс
IndentationError.
-
exception SystemError -
Возникает, когда интерпретатор обнаруживает внутреннюю ошибку, но ситуация не настолько серьёзна, чтобы отказаться от дальнейшей работы. Связанное значение — строка, указывающая, что пошло не так (на низком уровне). В CPython это исключение может возникнуть при неправильном использовании C API Python, например при возврате значения
NULLбез установленного исключения.Если вы уверены, что это исключение возникло не по вашей вине и не по вине используемого вами пакета, сообщите об этом автору или сопровождающему вашего интерпретатора Python. Обязательно укажите версию интерпретатора Python (
sys.version; она также выводится в начале интерактивного сеанса Python), точное сообщение об ошибке (связанное с исключением значение) и, если возможно, исходный код программы, вызвавшей ошибку.
-
exception SystemExit -
Это исключение вызывает функция
sys.exit(). Оно наследуется отBaseException, а не отException, чтобы его случайно не перехватил код, обрабатывающийException. Благодаря этому исключение может корректно передаваться вверх по стеку и приводить к завершению интерпретатора. Если исключение не обработано, интерпретатор Python завершает работу; трассировка стека не выводится. Конструктор принимает тот же необязательный аргумент, что и функцияsys.exit(). Если значение является целым числом, оно задаёт статус завершения системы (передаваемый функцииexit()в C); если этоNone, статус завершения равен нулю; если значение имеет другой тип (например, строковый), выводится значение объекта, а статус завершения равен единице.Вызов
sys.exit()преобразуется в исключение, чтобы могли выполняться обработчики очистки (предложенияfinallyинструкцийtry) и чтобы отладчик мог запускать скрипт без риска потерять управление. Если необходимо немедленно завершить работу (например, в дочернем процессе после вызоваos.fork()), можно использовать функциюos._exit().-
code -
Статус завершения или сообщение об ошибке, переданное конструктору. (По умолчанию —
None.)
-
-
exception TypeError -
Возникает, когда операция или функция применяется к объекту неподходящего типа. Связанное значение — строка с подробностями о несоответствии типов.
Пользовательский код может вызвать это исключение, чтобы указать, что попытка выполнить операцию над объектом не поддерживается и не должна поддерживаться. Если объект должен поддерживать данную операцию, но её реализация ещё не предоставлена, следует вызывать исключение
NotImplementedError.Передача аргументов неправильного типа (например,
listвместо ожидаемогоint) должна приводить к исключениюTypeError, а передача аргументов с неправильным значением (например, числа за пределами допустимого диапазона) — к исключениюValueError.
-
exception UnboundLocalError -
Возникает при обращении к локальной переменной в функции или методе, если этой переменной не было присвоено значение. Это подкласс
NameError.
-
exception UnicodeError -
Возникает при ошибке кодирования или декодирования, связанной с Unicode. Это подкласс
ValueError.UnicodeErrorимеет атрибуты, описывающие ошибку кодирования или декодирования. Например,err.object[err.start:err.end]содержит конкретные некорректные входные данные, на которых произошёл сбой кодека.-
encoding -
Название кодировки, вызвавшей ошибку.
-
reason -
Строка с описанием конкретной ошибки кодека.
-
object -
Объект, который кодек пытался закодировать или декодировать.
-
start -
Индекс первого некорректного элемента данных в
object.
-
end -
Индекс после последнего некорректного элемента данных в
object.
-
-
exception UnicodeEncodeError -
Возникает при ошибке, связанной с Unicode, во время кодирования. Это подкласс
UnicodeError.
-
exception UnicodeDecodeError -
Возникает при ошибке, связанной с Unicode, во время декодирования. Это подкласс
UnicodeError.
-
exception UnicodeTranslateError -
Возникает при ошибке, связанной с Unicode, во время преобразования. Это подкласс
UnicodeError.
-
exception ValueError -
Возникает, когда операция или функция получает аргумент правильного типа, но с недопустимым значением, и ситуацию не описывает более конкретное исключение, например
IndexError.
-
exception ZeroDivisionError -
Возникает, когда второй аргумент операции деления или вычисления остатка равен нулю. Связанное с исключением значение представляет собой строку, указывающую типы операндов и операцию.
Следующие исключения сохранены для совместимости с предыдущими версиями; начиная с Python 3.3, это псевдонимы OSError.
-
exception EnvironmentError
-
exception IOError
-
exception WindowsError -
Доступно только в Windows.
Исключения ОС
Следующие исключения являются подклассами OSError; они возникают в зависимости от кода системной ошибки.
-
exception BlockingIOError -
Возникает, когда операция блокируется на объекте (например, сокете), настроенном на неблокирующий режим. Соответствует
errnoEAGAIN,EALREADY,EWOULDBLOCKиEINPROGRESS.Помимо атрибутов
OSError, уBlockingIOErrorможет быть ещё один атрибут:-
characters_written -
Целое число, обозначающее количество символов, записанных в поток до его блокировки. Этот атрибут доступен при использовании классов буферизованного ввода-вывода из модуля
io.
-
-
exception ChildProcessError -
Возникает при сбое операции над дочерним процессом. Соответствует
errnoECHILD.
-
exception ConnectionError -
Базовый класс для ошибок, связанных с подключением.
Подклассы:
BrokenPipeError,ConnectionAbortedError,ConnectionRefusedErrorиConnectionResetError.
-
exception BrokenPipeError -
Подкласс
ConnectionError; возникает при попытке записи в канал, другой конец которого закрыт, или при попытке записи в сокет, для которого отключена запись. СоответствуетerrnoEPIPEиESHUTDOWN.
-
exception ConnectionAbortedError -
Подкласс
ConnectionError; возникает, когда другая сторона прерывает попытку подключения. СоответствуетerrnoECONNABORTED.
-
exception ConnectionRefusedError -
Подкласс
ConnectionError; возникает, когда другая сторона отклоняет попытку подключения. СоответствуетerrnoECONNREFUSED.
-
exception ConnectionResetError -
Подкласс
ConnectionError; возникает, когда другая сторона сбрасывает подключение. СоответствуетerrnoECONNRESET.
-
exception FileExistsError -
Возникает при попытке создать уже существующий файл или каталог. Соответствует
errnoEEXIST.
-
exception FileNotFoundError -
Возникает, когда запрашивается файл или каталог, которого не существует. Соответствует
errnoENOENT.
-
exception InterruptedError -
Возникает, когда системный вызов прерывается поступившим сигналом. Соответствует
errnoEINTR.Изменено в версии 3.5: Теперь Python повторяет системные вызовы, прерванные сигналом, вместо возникновения
InterruptedError, за исключением случаев, когда обработчик сигнала вызывает исключение (обоснование см. в PEP 475).
-
exception IsADirectoryError -
Возникает, когда файловая операция (например,
os.remove()) выполняется для каталога. СоответствуетerrnoEISDIR.
-
exception NotADirectoryError -
Возникает, когда операция с каталогом (например,
os.listdir()) выполняется для объекта, который не является каталогом. На большинстве платформ POSIX это исключение также может возникнуть, если операция пытается открыть файл, не являющийся каталогом, или пройти по нему так, словно это каталог. СоответствуетerrnoENOTDIR.
-
exception PermissionError -
Возникает при попытке выполнить операцию без необходимых прав доступа, например разрешений файловой системы. Соответствует
errnoEACCES,EPERMиENOTCAPABLE.Изменено в версии 3.11.1: Код ошибки WASI
ENOTCAPABLEтеперь преобразуется вPermissionError.
-
exception ProcessLookupError -
Возникает, когда указанный процесс не существует. Соответствует
errnoESRCH.
-
exception TimeoutError -
Возникает, когда системная функция завершает работу по тайм-ауту на уровне системы. Соответствует
errnoETIMEDOUT.
Добавлено в версии 3.3: Добавлены все перечисленные выше подклассы OSError.
См. также
PEP 3151 — Переработка иерархии исключений ОС и ввода-вывода
Предупреждения
Следующие исключения используются как категории предупреждений; дополнительные сведения см. в документации Категории предупреждений.
-
exception Warning -
Базовый класс для категорий предупреждений.
-
exception UserWarning -
Базовый класс для предупреждений, создаваемых пользовательским кодом.
-
exception DeprecationWarning -
Базовый класс для предупреждений об устаревших функциях, предназначенных для других разработчиков Python.
По умолчанию игнорируется фильтрами предупреждений, кроме модуля
__main__(PEP 565). Включение режима разработки Python позволяет отображать это предупреждение.Политика устаревания описана в PEP 387.
-
exception PendingDeprecationWarning -
Базовый класс для предупреждений о функциях, которые устарели и, как ожидается, будут признаны устаревшими в будущем, но пока таковыми не являются.
Этот класс используется редко: предупреждение о возможном будущем устаревании обычно неуместно, а для уже действующего устаревания предпочтителен
DeprecationWarning.По умолчанию игнорируется фильтрами предупреждений. Включение режима разработки Python позволяет отображать это предупреждение.
Политика устаревания описана в PEP 387.
-
exception SyntaxWarning -
Базовый класс для предупреждений о сомнительном синтаксисе.
Это предупреждение обычно выдаётся при компиляции исходного кода Python и, как правило, не выводится при запуске уже скомпилированного кода.
-
exception RuntimeWarning -
Базовый класс для предупреждений о сомнительном поведении во время выполнения.
-
exception FutureWarning -
Базовый класс для предупреждений об устаревших функциях, предназначенных для конечных пользователей приложений, написанных на Python.
-
exception ImportWarning -
Базовый класс для предупреждений о вероятных ошибках при импорте модулей.
По умолчанию игнорируется фильтрами предупреждений. Включение режима разработки Python позволяет отображать это предупреждение.
-
exception UnicodeWarning -
Базовый класс для предупреждений, связанных с Unicode.
-
exception EncodingWarning -
Базовый класс для предупреждений, связанных с кодировками.
Подробнее см. в разделе Предупреждение о кодировке, включаемое по запросу.
Добавлено в версии 3.10.
-
exception ResourceWarning -
Базовый класс для предупреждений, связанных с использованием ресурсов.
По умолчанию игнорируется фильтрами предупреждений. Включение режима разработки Python позволяет отображать это предупреждение.
Добавлено в версии 3.2.
Группы исключений
Следующие классы используются, когда необходимо вызвать несколько не связанных между собой исключений. Они входят в иерархию исключений, поэтому их можно обрабатывать с помощью except, как и все остальные исключения. Кроме того, их распознаёт except*, который сопоставляет их подгруппы на основе типов содержащихся исключений.
-
exception ExceptionGroup(msg, excs)
-
exception BaseExceptionGroup(msg, excs) -
Оба этих типа исключений объединяют исключения из последовательности
excs. Параметрmsgдолжен быть строкой. Разница между этими классами состоит в том, чтоBaseExceptionGroupнаследуется отBaseExceptionи может объединять любые исключения, тогда какExceptionGroupнаследуется отExceptionи может объединять только подклассыException. Такая конструкция позволяетexcept ExceptionперехватыватьExceptionGroup, но неBaseExceptionGroup.Конструктор
BaseExceptionGroupвозвращаетExceptionGroup, а неBaseExceptionGroup, если все содержащиеся исключения являются экземплярамиException, поэтому его можно использовать для автоматического выбора. КонструкторExceptionGroup, напротив, вызываетTypeError, если какое-либо содержащееся исключение не является подклассомException.-
message -
Аргумент
msg, переданный конструктору. Этот атрибут доступен только для чтения.
-
exceptions -
Кортеж исключений из последовательности
excs, переданной конструктору. Этот атрибут доступен только для чтения.
-
subgroup(condition) -
Возвращает группу исключений, содержащую только исключения из текущей группы, которые соответствуют условию, или
None, если результат пуст.Условием может быть тип исключения или кортеж типов исключений. В таком случае каждое исключение проверяется на соответствие с помощью той же проверки, что и в условии
except. Условием также может быть вызываемый объект (не являющийся объектом типа), который принимает исключение в качестве единственного аргумента и возвращает true для исключений, которые должны войти в подгруппу.В результате сохраняется структура вложенности текущего исключения, а также значения его полей
message,__traceback__,__cause__,__context__и__notes__. Пустые вложенные группы в результат не включаются.Условие проверяется для всех исключений во вложенной группе, включая группу верхнего уровня и любые вложенные группы исключений. Если условие истинно для такой группы исключений, она целиком включается в результат.
Добавлено в версии 3.13:
conditionможет быть любым вызываемым объектом, который не является объектом типа.
-
split(condition) -
Работает как
subgroup(), но возвращает пару(match, rest), гдеmatch— этоsubgroup(condition), аrest— оставшаяся часть, не соответствующая условию.
-
derive(excs) -
Возвращает группу исключений с тем же значением
message, но содержащую исключения изexcs.Этот метод используется методами
subgroup()иsplit(), которые в различных контекстах разбивают группу исключений. Подкласс должен переопределить этот метод, чтобыsubgroup()иsplit()возвращали экземпляры подкласса, а неExceptionGroup.subgroup()иsplit()копируют поля__traceback__,__cause__,__context__и__notes__из исходной группы исключений в группу, возвращаемую методомderive(), поэтому методуderive()не нужно обновлять эти поля.>>> class MyGroup(ExceptionGroup): ... def derive(self, excs): ... return MyGroup(self.message, excs) ... >>> e = MyGroup("eg", [ValueError(1), TypeError(2)]) >>> e.add_note("a note") >>> e.__context__ = Exception("context") >>> e.__cause__ = Exception("cause") >>> try: ... raise e ... except Exception as e: ... exc = e ... >>> match, rest = exc.split(ValueError) >>> exc, exc.__context__, exc.__cause__, exc.__notes__ (MyGroup('eg', [ValueError(1), TypeError(2)]), Exception('context'), Exception('cause'), ['a note']) >>> match, match.__context__, match.__cause__, match.__notes__ (MyGroup('eg', [ValueError(1)]), Exception('context'), Exception('cause'), ['a note']) >>> rest, rest.__context__, rest.__cause__, rest.__notes__ (MyGroup('eg', [TypeError(2)]), Exception('context'), Exception('cause'), ['a note']) >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True
Обратите внимание, что
BaseExceptionGroupопределяет__new__(), поэтому подклассам, которым нужна другая сигнатура конструктора, следует переопределять его, а не__init__(). Например, следующий код определяет подкласс группы исключений, который принимает exit_code и формирует по нему сообщение группы.class Errors(ExceptionGroup): def __new__(cls, errors, exit_code): self = super().__new__(Errors, f"exit code: {exit_code}", errors) self.exit_code = exit_code return self def derive(self, excs): return Errors(excs, self.exit_code)Как и
ExceptionGroup, любой подклассBaseExceptionGroup, который также является подклассомException, может объединять только экземплярыException.Добавлено в версии 3.11.
-
Иерархия исключений
Иерархия классов встроенных исключений:
BaseException
├── BaseExceptionGroup
├── GeneratorExit
├── KeyboardInterrupt
├── SystemExit
└── Exception
├── ArithmeticError
│ ├── FloatingPointError
│ ├── OverflowError
│ └── ZeroDivisionError
├── AssertionError
├── AttributeError
├── BufferError
├── EOFError
├── ExceptionGroup [BaseExceptionGroup]
├── 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
│ ├── PythonFinalizationError
│ └── RecursionError
├── StopAsyncIteration
├── StopIteration
├── SyntaxError
│ └── IndentationError
│ └── TabError
├── SystemError
├── TypeError
├── ValueError
│ └── UnicodeError
│ ├── UnicodeDecodeError
│ ├── UnicodeEncodeError
│ └── UnicodeTranslateError
└── Warning
├── BytesWarning
├── DeprecationWarning
├── EncodingWarning
├── FutureWarning
├── ImportWarning
├── PendingDeprecationWarning
├── ResourceWarning
├── RuntimeWarning
├── SyntaxWarning
├── UnicodeWarning
└── UserWarning
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/exceptions.html