Spec-Zone.ru › Python 3.13

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

В 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

Путь к любому файлу, который вызвал исключение.

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

exception ModuleNotFoundError

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

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

exception IndexError

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

exception KeyError

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

exception KeyboardInterrupt

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

Примечание

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

exception MemoryError

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

exception NameError

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

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

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

exception NotImplementedError

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

Примечание

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

Примечание

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

END_OF_DOCUMENT_MARKER
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: первая строка в файле имеет 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

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

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

exception SystemExit

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

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

code

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

exception TypeError

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

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

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

exception UnboundLocalError

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

exception UnicodeError

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

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

encoding

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

reason

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

object

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

start

Первый индекс неверных данных в object.

end

Индекс после последнего неверного значения в object.

exception UnicodeEncodeError

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

exception UnicodeDecodeError

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

exception UnicodeTranslateError

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

exception ValueError

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

exception ZeroDivisionError

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

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

exception EnvironmentError
exception IOError
exception WindowsError

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

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

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

exception BlockingIOError

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

В дополнение к тем, что у OSError, у BlockingIOError может быть ещё один атрибут:

characters_written

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

exception ChildProcessError

Вызывается, когда операция с дочерним процессом завершилась неудачно. Соответствует errno ECHILD.

exception ConnectionError

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

Подклассами являются BrokenPipeError, ConnectionAbortedError, ConnectionRefusedError и ConnectionResetError.

exception BrokenPipeError

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

exception ConnectionAbortedError

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

exception ConnectionRefusedError

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

exception ConnectionResetError

Подкласс ConnectionError, вызывается, когда подключение прерывается удалённой стороной. Соответствует errno ECONNRESET.

exception FileExistsError

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

exception FileNotFoundError

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

exception InterruptedError

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

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

exception IsADirectoryError

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

exception NotADirectoryError

Вызывается, когда запрашивается операция с каталогом (например, os.listdir()) на объекте, который не является каталогом. На большинстве POSIX-платформ он также может вызываться, если операция пытается открыть или пройти по файлу, не являющемуся каталогом, как если бы он был каталогом. Соответствует errno ENOTDIR.

exception PermissionError

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

Изменено в версии 3.11.1: WASI’s ENOTCAPABLE теперь сопоставляется с PermissionError.

exception ProcessLookupError

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

exception TimeoutError

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

Добавлен в версии 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 BytesWarning

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

exception ResourceWarning

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

Игнорируется стандартными фильтрами предупреждений. Включение Режим разработки Python отображает это предупреждение.

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

END_OF_DOCUMENT_MARKER

Группы исключений

Следующие типы используются, когда необходимо поднять несколько не связанных исключений. Они являются частью иерархии исключений, поэтому их можно обработать с помощью 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API