Содержание страницы
Встроенные исключения¶Built-in Exceptions
В Python все исключения должны быть экземплярами класса, производного от BaseException. В операторе try с предложением except, в котором указан конкретный класс, это предложение также обрабатывает любые классы исключений, производные от этого класса (но не классы исключений, от которых он сам является производным). Два класса исключений, не связанных через наследование, никогда не эквивалентны, даже если они имеют одинаковые имена.
Встроенные исключения, перечисленные в этой главе, могут быть сгенерированы интерпретатором или встроенными функциями. Если не указано иное, они имеют «связанное значение», которое указывает на подробную причину ошибки. Это может быть строка или кортеж из нескольких элементов информации (например, код ошибки и строка, поясняющая код). Связанное значение обычно передаётся в качестве аргументов конструктору класса исключения.
Пользовательский код может возбуждать встроенные исключения. Это можно использовать для проверки обработчика исключений или для сообщения об ошибке «точно так же», как если бы интерпретатор возбудил то же самое исключение; однако следует помнить, что ничто не мешает пользовательскому коду возбудить неподходящую ошибку.
Встроенные классы исключений могут быть подклассифицированы для определения новых исключений; программистам рекомендуется наследовать новые исключения от класса Exception или одного из его подклассов, а не от BaseException. Дополнительная информация об определении исключений доступна в Python Tutorial в разделе Пользовательские исключения.
Контекст исключения¶Exception context
Три атрибута объектов исключений предоставляют информацию о контексте, в котором было возбуждено исключение:
- 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.В любом случае, само исключение всегда показывается после любых связанных исключений, так что последняя строка трассировки всегда показывает последнее возбуждённое исключение.
Наследование от встроенных исключений¶Inheriting from built-in exceptions
Пользовательский код может создавать подклассы, которые наследуют от типа исключения. Рекомендуется создавать подкласс только одного типа исключения за раз, чтобы избежать возможных конфликтов в обработке атрибута args базовыми классами, а также из-за возможных несовместимостей компоновки памяти.
Особенность реализации CPython: Большинство встроенных исключений реализованы на C для эффективности, см.: Objects/exceptions.c. Некоторые из них имеют собственную компоновку памяти, что делает невозможным создание подкласса, наследующего от нескольких типов исключений. Компоновка памяти типа является деталью реализации и может измениться между версиями Python, что приведёт к новым конфликтам в будущем. Поэтому рекомендуется вообще избегать наследования от нескольких типов исключений.
Базовые классы¶Base classes
Следующие исключения в основном используются как базовые классы для других исключений.
- 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к заметкам исключения, которые появляются в стандартной трассировке после строки исключения. ВозбуждаетсяTypeError, еслиnoteне является строкой.Добавлено в версии 3.12.
- __notes__¶
Список примечаний этого исключения, добавленных с помощью
add_note(). Этот атрибут создаётся при вызовеadd_note().Добавлено в версии 3.12.
- exception Exception¶
Все встроенные исключения, не приводящие к завершению системы, являются производными от этого класса. Все определённые пользователем исключения также должны наследоваться от этого класса.
- exception ArithmeticError¶
Базовый класс для встроенных исключений, которые возбуждаются при различных арифметических ошибках:
OverflowError,ZeroDivisionError,FloatingPointError.
- exception LookupError¶
Базовый класс для исключений, возбуждаемых, когда ключ или индекс, используемые в отображении или последовательности, недействительны:
IndexError,KeyError. Оно может быть возбуждено напрямую с помощьюcodecs.lookup().
Конкретные исключения¶Concrete exceptions
Обычно возбуждаются следующие исключения.
- exception AttributeError¶
Возбуждается при неудачном обращении к атрибуту (см. Обращения к атрибутам) или присваивании. (Если объект вообще не поддерживает обращения к атрибутам или их присваивание, возбуждается
TypeError.)Необязательные именованные аргументы name и obj устанавливают соответствующие атрибуты:
- name¶
Имя атрибута, к которому была предпринята попытка обращения.
- obj¶
Объект, к которому было выполнено обращение для получения указанного атрибута.
- exception EOFError¶
Возбуждается, когда функция
input()достигает конца файла (EOF), не прочитав ни одного байта данных. (Примечание: методыio.TextIOBase.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¶
Вызывается, когда операция исчерпывает память, но ситуацию ещё можно исправить (удалив некоторые объекты). Связанное значение – строка, указывающая, какая (внутренняя) операция исчерпала память. Обратите внимание, что из-за лежащей в основе архитектуры управления памятью (функция C
malloc()) интерпретатор не всегда может полностью восстановиться после этой ситуации; тем не менее, он вызывает исключение, чтобы можно было вывести трассировку стека, если причиной была вышедшая из-под контроля программа.
- 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¶
Соответствующее сообщение об ошибке, предоставляемое операционной системой. Оно форматируется 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:См. также функцию
sys.is_finalizing().Добавлено в версии 3.13: Ранее вызывалось простое
RuntimeError.Изменено в версии 3.14:
threading.Thread.join()теперь может вызывать это исключение.
- 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._exit()можно использовать, если абсолютно необходимо выйти немедленно (например, в дочернем процессе после вызоваos.fork()).- 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¶
Объект, который кодек пытался закодировать или декодировать.
- 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.
Исключения ОС¶OS exceptions
Следующие исключения являются подклассами OSError; они возбуждаются в зависимости от кода системной ошибки.
- exception BlockingIOError¶
Возбуждается, когда операция заблокировалась бы на объекте (например, сокете), настроенном на неблокирующий режим. Соответствует
errnoEAGAIN,EALREADY,EWOULDBLOCKиEINPROGRESS.В дополнение к атрибутам
OSError,BlockingIOErrorможет иметь ещё один атрибут:
- 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
ENOTCAPABLEтеперь отображается наPermissionError.
- exception ProcessLookupError¶
Возбуждается, когда указанный процесс не существует. Соответствует
errnoESRCH.
- exception TimeoutError¶
Возбуждается, когда системная функция превысила время ожидания на уровне системы. Соответствует
errnoETIMEDOUT.
Добавлено в версии 3.3: Все вышеперечисленные подклассы OSError были добавлены.
См. также
PEP 3151 – Переработка иерархии исключений ОС и ввода-вывода
Предупреждения¶Warnings
Следующие исключения используются как категории предупреждений; см. документацию Категории предупреждений для получения дополнительных сведений.
- 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¶
Базовый класс для предупреждений, связанных с кодировками.
Подробнее см. Opt-in EncodingWarning.
Добавлено в версии 3.10.
- exception ResourceWarning¶
Базовый класс для предупреждений, связанных с использованием ресурсов.
Игнорируется фильтрами предупреждений по умолчанию. Включение режима разработки Python отображает это предупреждение.
Добавлено в версии 3.2.
Группы исключений¶Exception groups
Следующие классы используются, когда необходимо возбудить несколько несвязанных
исключений. Они являются частью иерархии исключений, поэтому их можно
обрабатывать с помощью 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.Группы исключений являются обобщёнными по типу содержащихся в них исключений.
Особенность реализации CPython: Параметр
excsможет быть любой последовательностью, но списки и кортежи обрабатываются здесь более эффективно. Для оптимальной производительности передавайте кортеж в качествеexcs.- message¶
Аргумент
msgконструктора. Это атрибут только для чтения.
- exceptions¶
Кортеж исключений из последовательности
excs, переданной конструктору. Это атрибут только для чтения.
- subgroup(condition)¶
Возвращает группу исключений, содержащую только те исключения из текущей группы, которые соответствуют условию, или
None, если результат пуст.Условием может быть тип исключения или кортеж типов исключений; в таком случае каждое исключение проверяется на соответствие с помощью той же проверки, что используется в предложении
except. Условием также может быть вызываемый объект (отличный от типа), который принимает исключение в качестве единственного аргумента и возвращает истину для исключений, которые должны быть в подгруппе.Структура вложенности текущего исключения сохраняется в результате, как и значения его полей
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.12.
Иерархия исключений¶Exception hierarchy
Иерархия классов для встроенных исключений:
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