Встроенные исключения
В 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могут быть заданы с помощью ключевых аргументов в конструкторе. При установке они представляют имя атрибута, к которому пытались получить доступ, и объект, к которому пытались получить доступ для этого атрибута, соответственно.Изменено в версии 3.10: Добавлены атрибуты
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может быть задан с помощью ключевого аргумента в конструкторе. При установке он представляет имя переменной, к которой пытались получить доступ.Изменено в версии 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 -
Соответствующее сообщение об ошибке, предоставленное операционной системой. Оно форматируется функциями 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 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(), или при чтении исходного скрипта или стандартного ввода (в интерактивном режиме).Строковое представление экземпляра исключения возвращает только сообщение об ошибке. Детали — это кортеж, члены которого также доступны как отдельные атрибуты.
-
filename -
Имя файла, в котором произошла синтаксическая ошибка.
-
lineno -
Номер строки в файле, в которой произошла ошибка. Это индексируется с 1: первая строка в файле имеет
lineno1.
-
offset -
Столбец в строке, где произошла ошибка. Это индексируется с 1: первый символ в строке имеет
offset1.
-
text -
Текст исходного кода, связанный с ошибкой.
-
end_lineno -
Номер строки в файле, в которой закончилась ошибка. Это индексируется с 1: первая строка в файле имеет
lineno1.
-
end_offset -
Столбец в конечной строке, где закончилась ошибка. Это индексируется с 1: первый символ в строке имеет
offset1.
Для ошибок в полях 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 -
Вызывается, когда интерпретатор находит внутреннюю ошибку, но ситуация не выглядит настолько серьёзной, чтобы отказаться от всех надежд. Соответствующее значение — строка, указывающая, что пошло не так (в терминах низкого уровня).
Вы должны сообщить об этом автору или разработчику вашей Python-интерпретатора. Убедитесь, что указали версию Python-интерпретатора (
sys.version; она также выводится в начале интерактивной Python-сессии), точное сообщение об ошибке (соответствующее значение исключения) и, по возможности, исходный код программы, которая вызвала ошибку.
-
exception SystemExit -
Это исключение вызывается функцией
sys.exit(). Оно наследуется отBaseException, а не отException, чтобы случайно не перехватываться кодом, перехватывающим исключениеException. Это позволяет исключению должным образом распространяться и вызывать выход интерпретатора. Если оно не обрабатывается, интерпретатор Python завершается; отладочная информация (stack trace) не выводится. Конструктор принимает тот же необязательный аргумент, что иsys.exit(). Если значение — целое число, оно задаёт системный код выхода (передаётся функции C’sexit()); если это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 -
Вызывается при возникновении ошибки, связанной с Юникодом, во время кодирования. Это подкласс
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 -
Вызывается, когда операция заблокируется на объекте (например, сокете), настроенном для работы без блокировки. Соответствует
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 теперь повторно пытается выполнить системные вызовы, когда системный вызов прерывается сигналом, за исключением случаев, когда обработчик сигнала вызывает исключение (см. PEP 475 для обоснования), вместо того чтобы вызывать
InterruptedError.
-
exception IsADirectoryError -
Вызывается, когда запрашивается операция с файлом (например,
os.remove()) на каталоге. СоответствуетerrnoEISDIR.
-
exception NotADirectoryError -
Вызывается, когда запрашивается операция с каталогом (например,
os.listdir()) на объекте, который не является каталогом. На большинстве POSIX-платформ он также может вызываться, если операция пытается открыть или пройти по файлу, не являющемуся каталогом, как если бы он был каталогом. СоответствуетerrnoENOTDIR.
-
exception PermissionError -
Вызывается при попытке выполнения операции без необходимых прав доступа — например, прав доступа к файловой системе. Соответствует
errnoEACCES,EPERMиENOTCAPABLE.Изменено в версии 3.11.1: WASI’s
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 -
Базовый класс для предупреждений о сомнительном синтаксисе.
-
exception RuntimeWarning -
Базовый класс для предупреждений о сомнительном поведении во время выполнения.
-
exception FutureWarning -
Базовый класс для предупреждений об устаревших функциях, когда эти предупреждения предназначены для конечных пользователей приложений, написанных на языке Python.
-
exception ImportWarning -
Базовый класс для предупреждений о возможных ошибках в импорте модулей.
Игнорируется стандартными фильтрами предупреждений. Включение Режим разработки Python отображает это предупреждение.
-
exception UnicodeWarning -
Базовый класс для предупреждений, связанных с Unicode.
-
exception EncodingWarning -
Базовый класс для предупреждений, связанных с кодировками.
См. Включение предупреждений 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) -
Возвращает группу исключений, содержащую только те исключения из текущей группы, которые соответствуют 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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/exceptions.html