Документация Python неофициальный перевод

exceptions.md

706 строк · 71.4 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.12/library/exceptions.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Встроенные исключения89В Python все исключения должны быть экземплярами класса, производного от [`BaseException`](https://python-all.ru/3.12/library/exceptions.html#BaseException). В операторе [`try`](https://python-all.ru/3.12/reference/compound_stmts.html#try) с предложением [`except`](https://python-all.ru/3.12/reference/compound_stmts.html#except), в котором указан конкретный класс, это предложение также обрабатывает любые классы исключений, производные от этого класса (но не классы исключений, от которых *он* сам является производным). Два класса исключений, не связанных через наследование, никогда не эквивалентны, даже если они имеют одинаковые имена.1011Встроенные исключения, перечисленные в этой главе, могут быть сгенерированы интерпретатором или встроенными функциями. Если не указано иное, они имеют «связанное значение», которое указывает на подробную причину ошибки. Это может быть строка или кортеж из нескольких элементов информации (например, код ошибки и строка, поясняющая код). Связанное значение обычно передаётся в качестве аргументов конструктору класса исключения.1213Пользовательский код может возбуждать встроенные исключения. Это можно использовать для проверки обработчика исключений или для сообщения об ошибке «точно так же», как если бы интерпретатор возбудил то же самое исключение; однако следует помнить, что ничто не мешает пользовательскому коду возбудить неподходящую ошибку.1415Встроенные классы исключений могут быть подклассифицированы для определения новых исключений; программистам рекомендуется наследовать новые исключения от класса [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception) или одного из его подклассов, а не от [`BaseException`](https://python-all.ru/3.12/library/exceptions.html#BaseException). Дополнительная информация об определении исключений доступна в Python Tutorial в разделе [Пользовательские исключения](https://python-all.ru/3.12/tutorial/errors.html#tut-userexceptions).1617## Контекст исключения1819Три атрибута объектов исключений предоставляют информацию о контексте, в котором было возбуждено исключение:2021#### `BaseException.__context__`2223#### `BaseException.__cause__`2425#### `BaseException.__suppress_context__`2627При возбуждении нового исключения, когда другое исключение уже обрабатывается, атрибут `__context__` нового исключения автоматически устанавливается на обрабатываемое исключение. Исключение может обрабатываться при использовании предложения [`except`](https://python-all.ru/3.12/reference/compound_stmts.html#except) или [`finally`](https://python-all.ru/3.12/reference/compound_stmts.html#finally), или оператора [`with`](https://python-all.ru/3.12/reference/compound_stmts.html#with).2829Этот неявный контекст исключения может быть дополнен явной причиной с помощью `from` с [`raise`](https://python-all.ru/3.12/reference/simple_stmts.html#raise):3031```python32raise new_exc from original_exc33```3435Выражение после [`from`](https://python-all.ru/3.12/reference/simple_stmts.html#raise) должно быть исключением или `None`. Оно будет установлено как `__cause__` у возбуждённого исключения. Установка `__cause__` также неявно устанавливает атрибут `__suppress_context__` в `True`, так что использование `raise new_exc from None` фактически заменяет старое исключение новым для целей отображения (например, преобразование [`KeyError`](https://python-all.ru/3.12/library/exceptions.html#KeyError) в [`AttributeError`](https://python-all.ru/3.12/library/exceptions.html#AttributeError)), оставляя старое исключение доступным в `__context__` для анализа при отладке.3637Код отображения стандартной трассировки показывает эти цепочки исключений в дополнение к трассировке самого исключения. Явно связанное исключение в `__cause__` всегда показывается, если присутствует. Неявно связанное исключение в `__context__` показывается только если `__cause__` равно [`None`](https://python-all.ru/3.12/library/constants.html#None) и `__suppress_context__` равно false.3839В любом случае, само исключение всегда показывается после любых связанных исключений, так что последняя строка трассировки всегда показывает последнее возбуждённое исключение.4041## Наследование от встроенных исключений4243Пользовательский код может создавать подклассы, которые наследуют от типа исключения. Рекомендуется создавать подкласс только одного типа исключения за раз, чтобы избежать возможных конфликтов в обработке атрибута `args` базовыми классами, а также из-за возможных несовместимостей компоновки памяти.4445**Особенность реализации CPython:** Большинство встроенных исключений реализованы на C для эффективности, см.: [Objects/exceptions.c](https://python-all.ru/src/3.12/Objects/exceptions.c). Некоторые из них имеют собственную компоновку памяти, что делает невозможным создание подкласса, наследующего от нескольких типов исключений. Компоновка памяти типа является деталью реализации и может измениться между версиями Python, что приведёт к новым конфликтам в будущем. Поэтому рекомендуется вообще избегать наследования от нескольких типов исключений.4647## Базовые классы4849Следующие исключения в основном используются как базовые классы для других исключений.5051#### `exception BaseException`5253Базовый класс для всех встроенных исключений. Он не предназначен для прямого наследования пользовательскими классами (для этого используйте [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception)). Если для экземпляра этого класса вызвать [`str()`](https://python-all.ru/3.12/library/stdtypes.html#str), возвращается строковое представление аргумента(ов) экземпляра, или пустая строка, если аргументов не было.5455#### `args`5657Кортеж аргументов, переданных конструктору исключения. Некоторые встроенные исключения (например, [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError)) ожидают определённое количество аргументов и присваивают элементам этого кортежа специальное значение, в то время как другие обычно вызываются только с одной строкой, содержащей сообщение об ошибке.5859#### `with_traceback(tb)`6061Этот метод устанавливает *tb* в качестве новой трассировки для исключения и возвращает объект исключения. Он чаще использовался до появления возможностей цепочек исключений из [**PEP 3134**](https://python-all.ru/3.12/library/exceptions.html). Следующий пример показывает, как можно преобразовать экземпляр `SomeException` в экземпляр `OtherException`, сохранив трассировку. После возбуждения текущий фрейм помещается в трассировку `OtherException`, как это произошло бы с трассировкой исходного `SomeException`, если бы мы позволили ему распространиться до вызывающего кода.6263```python64try:65    ...66except SomeException:67    tb = sys.exception().__traceback__68    raise OtherException(...).with_traceback(tb)69```7071#### `__traceback__`7273Поле для записи, которое содержит [объект трассировки](https://python-all.ru/3.12/reference/datamodel.html#traceback-objects), связанный с этим исключением. См. также: [Оператор raise](https://python-all.ru/3.12/reference/simple_stmts.html#raise).7475#### `add_note(note)`7677Добавляет строку `note` к заметкам исключения, которые появляются в стандартной трассировке после строки исключения. Возбуждается [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError), если `note` не является строкой.7879Добавлено в версии 3.12.8081#### `__notes__`8283Список примечаний этого исключения, добавленных с помощью [`add_note()`](https://python-all.ru/3.12/library/exceptions.html#BaseException.add_note). Этот атрибут создаётся при вызове [`add_note()`](https://python-all.ru/3.12/library/exceptions.html#BaseException.add_note).8485Добавлено в версии 3.12.8687#### `exception Exception`8889Все встроенные исключения, не приводящие к завершению системы, являются производными от этого класса. Все определённые пользователем исключения также должны наследоваться от этого класса.9091#### `exception ArithmeticError`9293Базовый класс для встроенных исключений, которые возбуждаются при различных арифметических ошибках: [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError), [`ZeroDivisionError`](https://python-all.ru/3.12/library/exceptions.html#ZeroDivisionError), [`FloatingPointError`](https://python-all.ru/3.12/library/exceptions.html#FloatingPointError).9495#### `exception BufferError`9697Возбуждается, когда не может быть выполнена операция, связанная с [буфером](https://python-all.ru/3.12/c-api/buffer.html#bufferobjects).9899#### `exception LookupError`100101Базовый класс для исключений, возбуждаемых, когда ключ или индекс, используемые в отображении или последовательности, недействительны: [`IndexError`](https://python-all.ru/3.12/library/exceptions.html#IndexError), [`KeyError`](https://python-all.ru/3.12/library/exceptions.html#KeyError). Оно может быть возбуждено напрямую с помощью [`codecs.lookup()`](https://python-all.ru/3.12/library/codecs.html#codecs.lookup).102103## Конкретные исключения104105Обычно возбуждаются следующие исключения.106107#### `exception AssertionError`108109Возбуждается, когда оператор [`assert`](https://python-all.ru/3.12/reference/simple_stmts.html#assert) завершается неудачно.110111#### `exception AttributeError`112113Возбуждается при неудачном обращении к атрибуту (см. [Обращения к атрибутам](https://python-all.ru/3.12/reference/expressions.html#attribute-references)) или присваивании. (Если объект вообще не поддерживает обращения к атрибутам или их присваивание, возбуждается [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError).)114115Атрибуты `name` и `obj` можно задать с помощью именованных аргументов конструктора. Если они заданы, то представляют имя атрибута, к которому была попытка обращения, и объект, для которого был запрошен этот атрибут, соответственно.116117Изменено в версии 3.10: Добавлены атрибуты `name` и `obj`.118119#### `exception EOFError`120121Возникает, когда функция [`input()`](https://python-all.ru/3.12/library/functions.html#input) достигает конца файла (EOF), не прочитав ни одного байта. (Прим.: методы `io.IOBase.read()` и [`io.IOBase.readline()`](https://python-all.ru/3.12/library/io.html#io.IOBase.readline) возвращают пустую строку при достижении EOF.)122123#### `exception FloatingPointError`124125В настоящее время не используется.126127#### `exception GeneratorExit`128129Возбуждается при закрытии [генератора](https://python-all.ru/3.12/glossary.html#term-generator) или [корутины](https://python-all.ru/3.12/glossary.html#term-coroutine); см. [`generator.close()`](https://python-all.ru/3.12/reference/expressions.html#generator.close) и [`coroutine.close()`](https://python-all.ru/3.12/reference/datamodel.html#coroutine.close). Это исключение напрямую наследуется от [`BaseException`](https://python-all.ru/3.12/library/exceptions.html#BaseException), а не от [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception), поскольку технически не является ошибкой.130131#### `exception ImportError`132133Возбуждается, когда оператор [`import`](https://python-all.ru/3.12/reference/simple_stmts.html#import) испытывает проблемы при попытке загрузить модуль. Также возбуждается, когда «список from» в `from ... import` содержит имя, которое не удаётся найти.134135Необязательные именованные аргументы *name* и *path* устанавливают соответствующие атрибуты:136137#### `name`138139Имя модуля, который пытались импортировать.140141#### `path`142143Путь к любому файлу, который вызвал исключение.144145Изменено в версии 3.3: Добавлены атрибуты [`name`](https://python-all.ru/3.12/library/exceptions.html#ImportError.name) и [`path`](https://python-all.ru/3.12/library/exceptions.html#ImportError.path).146147#### `exception ModuleNotFoundError`148149Подкласс [`ImportError`](https://python-all.ru/3.12/library/exceptions.html#ImportError), который вызывается [`import`](https://python-all.ru/3.12/reference/simple_stmts.html#import), когда модуль не может быть найден. Также вызывается, когда `None` обнаружен в [`sys.modules`](https://python-all.ru/3.12/library/sys.html#sys.modules).150151Добавлено в версии 3.6.152153#### `exception IndexError`154155Вызывается, когда индекс последовательности выходит за диапазон. (Индексы среза молча обрезаются, чтобы попасть в допустимый диапазон; если индекс не является целым числом, вызывается [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError).)156157#### `exception KeyError`158159Вызывается, когда ключ отображения (словаря) не найден среди существующих ключей.160161#### `exception KeyboardInterrupt`162163Вызывается, когда пользователь нажимает клавишу прерывания (обычно `Control`-`C` или `Delete`). Во время выполнения регулярно выполняется проверка прерываний. Исключение наследуется от [`BaseException`](https://python-all.ru/3.12/library/exceptions.html#BaseException), чтобы случайно не быть перехваченным кодом, который ловит [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception), и тем самым предотвратить завершение интерпретатора.164165> **Примечание**166>167> Перехват [`KeyboardInterrupt`](https://python-all.ru/3.12/library/exceptions.html#KeyboardInterrupt) требует особого внимания. Поскольку он может быть вызван в непредсказуемых точках, это может в некоторых обстоятельствах оставить выполняющуюся программу в несогласованном состоянии. Обычно лучше позволить [`KeyboardInterrupt`](https://python-all.ru/3.12/library/exceptions.html#KeyboardInterrupt) завершить программу как можно быстрее или вообще избегать его вызова. (См. [Примечание об обработчиках сигналов и исключениях](https://python-all.ru/3.12/library/signal.html#handlers-and-exceptions).)168169#### `exception MemoryError`170171Вызывается, когда операция исчерпывает память, но ситуацию ещё можно исправить (удалив некоторые объекты). Связанное значение – строка, указывающая, какая (внутренняя) операция исчерпала память. Обратите внимание, что из-за лежащей в основе архитектуры управления памятью (функция C `malloc()`) интерпретатор не всегда может полностью восстановиться после этой ситуации; тем не менее, он вызывает исключение, чтобы можно было вывести трассировку стека, если причиной была вышедшая из-под контроля программа.172173#### `exception NameError`174175Вызывается, когда не найдено локальное или глобальное имя. Это относится только к неквалифицированным именам. Связанное значение – сообщение об ошибке, которое включает имя, которое не удалось найти.176177Атрибут `name` можно задать с помощью именованного аргумента конструктора. Если он задан, то представляет имя переменной, к которой была попытка обращения.178179Изменено в версии 3.10: Добавлен атрибут `name`.180181#### `exception NotImplementedError`182183Это исключение является производным от [`RuntimeError`](https://python-all.ru/3.12/library/exceptions.html#RuntimeError). В определённых пользователями базовых классах абстрактные методы должны вызывать это исключение, когда они требуют, чтобы производные классы переопределили метод, или пока класс находится в разработке, чтобы указать, что реальная реализация ещё не добавлена.184185> **Примечание**186>187> Он не должен использоваться для указания того, что оператор или метод не предназначен для поддержки вообще – в этом случае либо оставьте оператор/метод неопределённым, либо, если это подкласс, установите его в [`None`](https://python-all.ru/3.12/library/constants.html#None).188189> **Внимание**190>191> `NotImplementedError` и `NotImplemented` не взаимозаменяемы. Это исключение следует использовать только так, как описано выше; подробнее о правильном использовании встроенной константы см. [`NotImplemented`](https://python-all.ru/3.12/library/constants.html#NotImplemented).192193#### `exception OSError([arg])`194195#### `exception OSError(errno, strerror[, filename[, winerror[, filename2]]])`196197Это исключение вызывается, когда системная функция возвращает системную ошибку, включая ошибки ввода-вывода, такие как «файл не найден» или «диск заполнен» (не для недопустимых типов аргументов или других случайных ошибок).198199Вторая форма конструктора устанавливает соответствующие атрибуты, описанные ниже. Атрибуты по умолчанию равны [`None`](https://python-all.ru/3.12/library/constants.html#None), если не указаны. Для обратной совместимости, если передано три аргумента, атрибут [`args`](https://python-all.ru/3.12/library/exceptions.html#BaseException.args) содержит только кортеж из двух элементов из первых двух аргументов конструктора.200201Конструктор часто фактически возвращает подкласс [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError), как описано в [Исключения ОС](https://python-all.ru/3.12/library/exceptions.html#os-exceptions) ниже. Конкретный подкласс зависит от конечного значения [`errno`](https://python-all.ru/3.12/library/exceptions.html#OSError.errno). Это поведение происходит только при конструировании [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError) напрямую или через псевдоним и не наследуется при создании подклассов.202203#### `errno`204205Числовой код ошибки из переменной C `errno`.206207#### `winerror`208209В Windows это возвращает собственный код ошибки Windows. Атрибут [`errno`](https://python-all.ru/3.12/library/exceptions.html#OSError.errno) является приблизительным переводом этого кода в терминах POSIX.210211В Windows, если аргумент конструктора *winerror* является целым числом, атрибут [`errno`](https://python-all.ru/3.12/library/exceptions.html#OSError.errno) определяется из кода ошибки Windows, а аргумент *errno* игнорируется. На других платформах аргумент *winerror* игнорируется, а атрибут [`winerror`](https://python-all.ru/3.12/library/exceptions.html#OSError.winerror) не существует.212213#### `strerror`214215Соответствующее сообщение об ошибке, предоставляемое операционной системой. Оно форматируется C-функциями `perror()` в POSIX и `FormatMessage()` в Windows.216217#### `filename`218219#### `filename2`220221Для исключений, связанных с путём файловой системы (например, [`open()`](https://python-all.ru/3.12/library/functions.html#open) или [`os.unlink()`](https://python-all.ru/3.12/library/os.html#os.unlink)), [`filename`](https://python-all.ru/3.12/library/exceptions.html#OSError.filename) – это имя файла, переданное функции. Для функций, работающих с двумя путями (например, [`os.rename()`](https://python-all.ru/3.12/library/os.html#os.rename)), [`filename2`](https://python-all.ru/3.12/library/exceptions.html#OSError.filename2) соответствует второму имени файла, переданному функции.222223Изменено в версии 3.3: [`EnvironmentError`](https://python-all.ru/3.12/library/exceptions.html#EnvironmentError), [`IOError`](https://python-all.ru/3.12/library/exceptions.html#IOError), [`WindowsError`](https://python-all.ru/3.12/library/exceptions.html#WindowsError), [`socket.error`](https://python-all.ru/3.12/library/socket.html#socket.error), [`select.error`](https://python-all.ru/3.12/library/select.html#select.error) и `mmap.error` были объединены в [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError), и конструктор может возвращать подкласс.224225Изменено в версии 3.4: Атрибут [`filename`](https://python-all.ru/3.12/library/exceptions.html#OSError.filename) теперь содержит исходное имя файла, переданное функции, а не имя, закодированное или декодированное с помощью [кодировки файловой системы и обработчика ошибок](https://python-all.ru/3.12/glossary.html#term-filesystem-encoding-and-error-handler). Также были добавлены аргумент конструктора и атрибут *filename2*.226227#### `exception OverflowError`228229Возникает, когда результат арифметической операции слишком велик для представления. Для целых чисел этого не происходит (они скорее вызовут [`MemoryError`](https://python-all.ru/3.12/library/exceptions.html#MemoryError), чем откажутся от значения). Однако по историческим причинам OverflowError иногда возникает для целых чисел, выходящих за требуемый диапазон. Из-за отсутствия стандартизации обработки исключений с плавающей точкой в C, большинство операций с плавающей точкой не проверяются.230231#### `exception RecursionError`232233Это исключение является производным от [`RuntimeError`](https://python-all.ru/3.12/library/exceptions.html#RuntimeError). Возникает, когда интерпретатор обнаруживает, что превышена максимальная глубина рекурсии (см. [`sys.getrecursionlimit()`](https://python-all.ru/3.12/library/sys.html#sys.getrecursionlimit)).234235Добавлено в версии 3.5: Ранее вызывалось простое [`RuntimeError`](https://python-all.ru/3.12/library/exceptions.html#RuntimeError).236237#### `exception ReferenceError`238239Это исключение возникает, когда прокси-объект слабой ссылки, созданный функцией [`weakref.proxy()`](https://python-all.ru/3.12/library/weakref.html#weakref.proxy), используется для доступа к атрибуту референта после его сборки мусора. Дополнительную информацию о слабых ссылках см. в модуле [`weakref`](https://python-all.ru/3.12/library/weakref.html#module-weakref).240241#### `exception RuntimeError`242243Возникает, когда обнаружена ошибка, не попадающая ни в одну из других категорий. Связанное значение – строка, указывающая, что именно пошло не так.244245#### `exception StopIteration`246247Возникает при вызове встроенной функции [`next()`](https://python-all.ru/3.12/library/functions.html#next) и метода [`__next__()`](https://python-all.ru/3.12/library/stdtypes.html#iterator.__next__) [итератора](https://python-all.ru/3.12/glossary.html#term-iterator), чтобы сигнализировать, что итератор больше не выдаёт элементы.248249#### `value`250251Объект исключения имеет единственный атрибут `value`, который передаётся в качестве аргумента при создании исключения и по умолчанию равен [`None`](https://python-all.ru/3.12/library/constants.html#None).252253Когда [генератор](https://python-all.ru/3.12/glossary.html#term-generator) или [корутина](https://python-all.ru/3.12/glossary.html#term-coroutine) возвращает, возбуждается новый экземпляр [`StopIteration`](https://python-all.ru/3.12/library/exceptions.html#StopIteration), и возвращённое функцией значение используется как параметр [`value`](https://python-all.ru/3.12/library/exceptions.html#StopIteration.value) конструктора исключения.254255Если код генератора прямо или косвенно вызывает [`StopIteration`](https://python-all.ru/3.12/library/exceptions.html#StopIteration), он преобразуется в [`RuntimeError`](https://python-all.ru/3.12/library/exceptions.html#RuntimeError) (с сохранением [`StopIteration`](https://python-all.ru/3.12/library/exceptions.html#StopIteration) в качестве причины нового исключения).256257Изменено в версии 3.3: Добавлен атрибут `value` и возможность для функций-генераторов использовать его для возврата значения.258259Изменено в версии 3.5: Введено преобразование RuntimeError через `from __future__ import generator_stop`, см. [**PEP 479**](https://python-all.ru/3.12/library/exceptions.html).260261Изменено в версии 3.7: Включён [**PEP 479**](https://python-all.ru/3.12/library/exceptions.html) для всего кода по умолчанию: ошибка [`StopIteration`](https://python-all.ru/3.12/library/exceptions.html#StopIteration), возникшая в генераторе, преобразуется в [`RuntimeError`](https://python-all.ru/3.12/library/exceptions.html#RuntimeError).262263#### `exception StopAsyncIteration`264265Должно быть возбуждено методом [`__anext__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__anext__) объекта [асинхронный итератор](https://python-all.ru/3.12/glossary.html#term-asynchronous-iterator), чтобы остановить итерацию.266267Добавлено в версии 3.5.268269#### `exception SyntaxError(message, details)`270271Возбуждается, когда анализатор встречает синтаксическую ошибку. Это может произойти в операторе [`import`](https://python-all.ru/3.12/reference/simple_stmts.html#import), при вызове встроенных функций [`compile()`](https://python-all.ru/3.12/library/functions.html#compile), [`exec()`](https://python-all.ru/3.12/library/functions.html#exec), или [`eval()`](https://python-all.ru/3.12/library/functions.html#eval), или при чтении начального скрипта или стандартного ввода (также в интерактивном режиме).272273Атрибут [`str()`](https://python-all.ru/3.12/library/stdtypes.html#str) экземпляра исключения возвращает только сообщение об ошибке. Подробности – это кортеж, элементы которого также доступны как отдельные атрибуты.274275#### `filename`276277Имя файла, в котором произошла синтаксическая ошибка.278279#### `lineno`280281Номер строки в файле, в которой произошла ошибка. Нумерация начинается с 1: первая строка файла имеет `lineno` равный 1.282283#### `offset`284285Столбец в строке, в котором произошла ошибка. Нумерация начинается с 1: первый символ строки имеет `offset` равный 1.286287#### `text`288289Текст исходного кода, связанный с ошибкой.290291#### `end_lineno`292293Номер строки в файле, на которой заканчивается ошибка. Нумерация начинается с 1: первая строка файла имеет `lineno` равный 1.294295#### `end_offset`296297Столбец в конечной строке, на котором завершается ошибка. Нумерация начинается с 1: первый символ строки имеет `offset` равный 1.298299Для ошибок в полях f-строк к сообщению добавляется префикс «f-string: », а смещения – это смещения в тексте, сформированном из подставляемого выражения. Например, компиляция f’Bad {a b} field’ приводит к такому атрибуту args: (‘f-string: …’, (‘’, 1, 2, ‘(a b)n’, 1, 5)).300301Изменено в версии 3.10: Добавлены атрибуты [`end_lineno`](https://python-all.ru/3.12/library/exceptions.html#SyntaxError.end_lineno) и [`end_offset`](https://python-all.ru/3.12/library/exceptions.html#SyntaxError.end_offset).302303#### `exception IndentationError`304305Базовый класс для синтаксических ошибок, связанных с неверным отступом. Является подклассом [`SyntaxError`](https://python-all.ru/3.12/library/exceptions.html#SyntaxError).306307#### `exception TabError`308309Возбуждается, когда отступ содержит непоследовательное использование табуляции и пробелов. Является подклассом [`IndentationError`](https://python-all.ru/3.12/library/exceptions.html#IndentationError).310311#### `exception SystemError`312313Возбуждается, когда интерпретатор обнаруживает внутреннюю ошибку, но ситуация не настолько серьёзна, чтобы он отказался от всех надежд. Связанное значение – это строка с указанием того, что пошло не так (на низком уровне). В [CPython](https://python-all.ru/3.12/glossary.html#term-CPython) это может быть вызвано неправильным использованием C API Python, например, возвратом значения `NULL` без установленного исключения.314315Если вы уверены, что это исключение возникло не по вашей вине или по вине используемого пакета, сообщите об этом автору или сопровождающему вашего интерпретатора Python. Обязательно укажите версию интерпретатора Python (`sys.version`; она также выводится в начале интерактивной сессии Python), точное сообщение об ошибке (связанное значение исключения) и, если возможно, исходный код программы, вызвавшей ошибку.316317#### `exception SystemExit`318319Это исключение возбуждается функцией [`sys.exit()`](https://python-all.ru/3.12/library/sys.html#sys.exit). Оно наследуется от [`BaseException`](https://python-all.ru/3.12/library/exceptions.html#BaseException), а не от [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception), чтобы его случайно не перехватил код, который перехватывает [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception). Это позволяет исключению правильно всплыть и вызвать завершение интерпретатора. Если оно не обработано, интерпретатор Python завершается; стек вызовов не выводится. Конструктор принимает тот же необязательный аргумент, что и [`sys.exit()`](https://python-all.ru/3.12/library/sys.html#sys.exit). Если значение – целое число, оно задаёт статус выхода системы (передаётся функции `exit()` в C); если это `None`, статус выхода равен нулю; если имеет другой тип (например, строку), значение объекта выводится, а статус выхода равен единице.320321Вызов [`sys.exit()`](https://python-all.ru/3.12/library/sys.html#sys.exit) преобразуется в исключение, чтобы могли выполниться обработчики очистки (блоки [`finally`](https://python-all.ru/3.12/reference/compound_stmts.html#finally) операторов [`try`](https://python-all.ru/3.12/reference/compound_stmts.html#try)), а также чтобы отладчик мог выполнить скрипт без риска потерять управление. Функцию [`os._exit()`](https://python-all.ru/3.12/library/os.html#os._exit) можно использовать, если абсолютно необходимо выйти немедленно (например, в дочернем процессе после вызова [`os.fork()`](https://python-all.ru/3.12/library/os.html#os.fork)).322323#### `code`324325Код возврата или сообщение об ошибке, передаваемые в конструктор. (По умолчанию `None`.)326327#### `exception TypeError`328329Вызывается, когда операция или функция применяется к объекту неподходящего типа. Связанное значение – строка с подробностями о несоответствии типов.330331Это исключение может вызываться пользовательским кодом, чтобы указать, что попытка выполнить операцию над объектом не поддерживается и не предполагается. Если объект должен поддерживать данную операцию, но ещё не имеет реализации, правильным исключением будет [`NotImplementedError`](https://python-all.ru/3.12/library/exceptions.html#NotImplementedError).332333Передача аргументов неправильного типа (например, передача [`list`](https://python-all.ru/3.12/library/stdtypes.html#list), когда ожидается [`int`](https://python-all.ru/3.12/library/functions.html#int)) должна приводить к [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError), а передача аргументов с неправильным значением (например, число вне допустимых границ) должна приводить к [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError).334335#### `exception UnboundLocalError`336337Вызывается, когда осуществляется обращение к локальной переменной функции или метода, но этой переменной не присвоено значение. Является подклассом [`NameError`](https://python-all.ru/3.12/library/exceptions.html#NameError).338339#### `exception UnicodeError`340341Вызывается при ошибке кодирования или декодирования, связанной с Unicode. Является подклассом [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError).342343[`UnicodeError`](https://python-all.ru/3.12/library/exceptions.html#UnicodeError) имеет атрибуты, описывающие ошибку кодирования или декодирования. Например, `err.object[err.start:err.end]` содержит конкретные недопустимые входные данные, на которых споткнулся кодек.344345#### `encoding`346347Имя кодировки, вызвавшей ошибку.348349#### `reason`350351Строка, описывающая конкретную ошибку кодека.352353#### `object`354355Объект, который кодек пытался закодировать или декодировать.356357#### `start`358359Первый индекс недопустимых данных в [`object`](https://python-all.ru/3.12/library/functions.html#object).360361#### `end`362363Индекс, следующий за последними недопустимыми данными в [`object`](https://python-all.ru/3.12/library/functions.html#object).364365#### `exception UnicodeEncodeError`366367Вызывается при ошибке, связанной с Unicode, во время кодирования. Является подклассом [`UnicodeError`](https://python-all.ru/3.12/library/exceptions.html#UnicodeError).368369#### `exception UnicodeDecodeError`370371Вызывается при ошибке, связанной с Unicode, во время декодирования. Является подклассом [`UnicodeError`](https://python-all.ru/3.12/library/exceptions.html#UnicodeError).372373#### `exception UnicodeTranslateError`374375Вызывается при ошибке, связанной с Unicode, во время трансляции. Является подклассом [`UnicodeError`](https://python-all.ru/3.12/library/exceptions.html#UnicodeError).376377#### `exception ValueError`378379Вызывается, когда операция или функция получает аргумент правильного типа, но с неподходящим значением, и ситуация не описывается более точным исключением, например [`IndexError`](https://python-all.ru/3.12/library/exceptions.html#IndexError).380381#### `exception ZeroDivisionError`382383Вызывается, когда второй аргумент операции деления или взятия остатка равен нулю. Связанное значение – строка, указывающая тип операндов и операцию.384385Следующие исключения сохранены для совместимости с предыдущими версиями; начиная с Python 3.3, они являются псевдонимами [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError).386387#### `exception EnvironmentError`388389#### `exception IOError`390391#### `exception WindowsError`392393Доступно только в Windows.394395### Исключения ОС396397Следующие исключения являются подклассами [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError); они возбуждаются в зависимости от кода системной ошибки.398399#### `exception BlockingIOError`400401Возбуждается, когда операция заблокировалась бы на объекте (например, сокете), настроенном на неблокирующий режим. Соответствует `errno` [`EAGAIN`](https://python-all.ru/3.12/library/errno.html#errno.EAGAIN), [`EALREADY`](https://python-all.ru/3.12/library/errno.html#errno.EALREADY), [`EWOULDBLOCK`](https://python-all.ru/3.12/library/errno.html#errno.EWOULDBLOCK) и [`EINPROGRESS`](https://python-all.ru/3.12/library/errno.html#errno.EINPROGRESS).402403В дополнение к атрибутам [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError), [`BlockingIOError`](https://python-all.ru/3.12/library/exceptions.html#BlockingIOError) может иметь ещё один атрибут:404405#### `characters_written`406407Целое число, содержащее количество символов, записанных в поток до блокировки. Этот атрибут доступен при использовании классов буферизованного ввода-вывода из модуля [`io`](https://python-all.ru/3.12/library/io.html#module-io).408409#### `exception ChildProcessError`410411Возбуждается, когда операция над дочерним процессом завершилась ошибкой. Соответствует `errno` [`ECHILD`](https://python-all.ru/3.12/library/errno.html#errno.ECHILD).412413#### `exception ConnectionError`414415Базовый класс для проблем, связанных с соединением.416417Подклассами являются [`BrokenPipeError`](https://python-all.ru/3.12/library/exceptions.html#BrokenPipeError), [`ConnectionAbortedError`](https://python-all.ru/3.12/library/exceptions.html#ConnectionAbortedError), [`ConnectionRefusedError`](https://python-all.ru/3.12/library/exceptions.html#ConnectionRefusedError) и [`ConnectionResetError`](https://python-all.ru/3.12/library/exceptions.html#ConnectionResetError).418419#### `exception BrokenPipeError`420421Подкласс [`ConnectionError`](https://python-all.ru/3.12/library/exceptions.html#ConnectionError), возбуждается при попытке записи в канал, когда другой его конец закрыт, или при попытке записи в сокет, который был закрыт для записи. Соответствует `errno` [`EPIPE`](https://python-all.ru/3.12/library/errno.html#errno.EPIPE) и [`ESHUTDOWN`](https://python-all.ru/3.12/library/errno.html#errno.ESHUTDOWN).422423#### `exception ConnectionAbortedError`424425Подкласс [`ConnectionError`](https://python-all.ru/3.12/library/exceptions.html#ConnectionError), возбуждается, когда попытка соединения прервана удалённой стороной. Соответствует `errno` [`ECONNABORTED`](https://python-all.ru/3.12/library/errno.html#errno.ECONNABORTED).426427#### `exception ConnectionRefusedError`428429Подкласс [`ConnectionError`](https://python-all.ru/3.12/library/exceptions.html#ConnectionError), возбуждается, когда попытка соединения отклонена удалённой стороной. Соответствует `errno` [`ECONNREFUSED`](https://python-all.ru/3.12/library/errno.html#errno.ECONNREFUSED).430431#### `exception ConnectionResetError`432433Подкласс [`ConnectionError`](https://python-all.ru/3.12/library/exceptions.html#ConnectionError), возбуждается, когда соединение сброшено удалённой стороной. Соответствует `errno` [`ECONNRESET`](https://python-all.ru/3.12/library/errno.html#errno.ECONNRESET).434435#### `exception FileExistsError`436437Возбуждается при попытке создать файл или каталог, который уже существует. Соответствует `errno` [`EEXIST`](https://python-all.ru/3.12/library/errno.html#errno.EEXIST).438439#### `exception FileNotFoundError`440441Возбуждается, когда запрашивается файл или каталог, который не существует. Соответствует `errno` [`ENOENT`](https://python-all.ru/3.12/library/errno.html#errno.ENOENT).442443#### `exception InterruptedError`444445Возбуждается, когда системный вызов прерывается входящим сигналом. Соответствует `errno` [`EINTR`](https://python-all.ru/3.12/library/errno.html#errno.EINTR).446447Изменено в версии 3.5: Теперь Python повторяет системные вызовы, когда системный вызов прерывается сигналом, за исключением случая, когда обработчик сигнала возбуждает исключение (см. [**PEP 475**](https://python-all.ru/3.12/library/exceptions.html) для обоснования), вместо возбуждения [`InterruptedError`](https://python-all.ru/3.12/library/exceptions.html#InterruptedError).448449#### `exception IsADirectoryError`450451Возбуждается, когда файловая операция (например, [`os.remove()`](https://python-all.ru/3.12/library/os.html#os.remove)) запрашивается для каталога. Соответствует `errno` [`EISDIR`](https://python-all.ru/3.12/library/errno.html#errno.EISDIR).452453#### `exception NotADirectoryError`454455Возбуждается, когда операция с каталогом (например, [`os.listdir()`](https://python-all.ru/3.12/library/os.html#os.listdir)) запрашивается для чего-то, что не является каталогом. На большинстве платформ POSIX также может возбуждаться, если операция пытается открыть или обойти файл, не являющийся каталогом, как если бы он был каталогом. Соответствует `errno` [`ENOTDIR`](https://python-all.ru/3.12/library/errno.html#errno.ENOTDIR).456457#### `exception PermissionError`458459Возбуждается при попытке выполнить операцию без соответствующих прав доступа – например, прав файловой системы. Соответствует `errno` [`EACCES`](https://python-all.ru/3.12/library/errno.html#errno.EACCES), [`EPERM`](https://python-all.ru/3.12/library/errno.html#errno.EPERM) и [`ENOTCAPABLE`](https://python-all.ru/3.12/library/errno.html#errno.ENOTCAPABLE).460461Изменено в версии 3.11.1: WASI [`ENOTCAPABLE`](https://python-all.ru/3.12/library/errno.html#errno.ENOTCAPABLE) теперь отображается на [`PermissionError`](https://python-all.ru/3.12/library/exceptions.html#PermissionError).462463#### `exception ProcessLookupError`464465Возбуждается, когда указанный процесс не существует. Соответствует `errno` [`ESRCH`](https://python-all.ru/3.12/library/errno.html#errno.ESRCH).466467#### `exception TimeoutError`468469Возбуждается, когда системная функция превысила время ожидания на уровне системы. Соответствует `errno` [`ETIMEDOUT`](https://python-all.ru/3.12/library/errno.html#errno.ETIMEDOUT).470471Добавлено в версии 3.3: Все вышеперечисленные подклассы [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError) были добавлены.472473> **См. также**474>475> [**PEP 3151**](https://python-all.ru/3.12/library/exceptions.html) – Переработка иерархии исключений ОС и ввода-вывода476477## Предупреждения478479Следующие исключения используются как категории предупреждений; см. документацию [Категории предупреждений](https://python-all.ru/3.12/library/warnings.html#warning-categories) для получения дополнительных сведений.480481#### `exception Warning`482483Базовый класс для категорий предупреждений.484485#### `exception UserWarning`486487Базовый класс для предупреждений, генерируемых пользовательским кодом.488489#### `exception DeprecationWarning`490491Базовый класс для предупреждений об устаревших возможностях, когда эти предупреждения предназначены для других разработчиков Python.492493Игнорируется фильтрами предупреждений по умолчанию, за исключением модуля `__main__` ([**PEP 565**](https://python-all.ru/3.12/library/exceptions.html)). Включение [режима разработки Python](https://python-all.ru/3.12/library/devmode.html#devmode) показывает это предупреждение.494495Политика устаревания описана в [**PEP 387**](https://python-all.ru/3.12/library/exceptions.html).496497#### `exception PendingDeprecationWarning`498499Базовый класс для предупреждений о возможностях, которые устарели и ожидается, что будут объявлены устаревшими в будущем, но в данный момент не являются устаревшими.500501Этот класс используется редко, поскольку отправка предупреждения о возможном будущем устаревании необычна, и для уже активных устареваний предпочтительнее [`DeprecationWarning`](https://python-all.ru/3.12/library/exceptions.html#DeprecationWarning).502503Игнорируется фильтрами предупреждений по умолчанию. Включение [режима разработки Python](https://python-all.ru/3.12/library/devmode.html#devmode) отображает это предупреждение.504505Политика устаревания описана в [**PEP 387**](https://python-all.ru/3.12/library/exceptions.html).506507#### `exception SyntaxWarning`508509Базовый класс для предупреждений о сомнительном синтаксисе.510511#### `exception RuntimeWarning`512513Базовый класс для предупреждений о сомнительном поведении во время выполнения.514515#### `exception FutureWarning`516517Базовый класс для предупреждений об устаревших возможностях, предназначенных для конечных пользователей приложений, написанных на Python.518519#### `exception ImportWarning`520521Базовый класс для предупреждений о возможных ошибках при импорте модулей.522523Игнорируется фильтрами предупреждений по умолчанию. Включение [режима разработки Python](https://python-all.ru/3.12/library/devmode.html#devmode) отображает это предупреждение.524525#### `exception UnicodeWarning`526527Базовый класс для предупреждений, связанных с Unicode.528529#### `exception EncodingWarning`530531Базовый класс для предупреждений, связанных с кодировками.532533Подробнее см. [Opt-in EncodingWarning](https://python-all.ru/3.12/library/io.html#io-encoding-warning).534535Добавлено в версии 3.10.536537#### `exception BytesWarning`538539Базовый класс для предупреждений, связанных с [`bytes`](https://python-all.ru/3.12/library/stdtypes.html#bytes) и [`bytearray`](https://python-all.ru/3.12/library/stdtypes.html#bytearray).540541#### `exception ResourceWarning`542543Базовый класс для предупреждений, связанных с использованием ресурсов.544545Игнорируется фильтрами предупреждений по умолчанию. Включение [режима разработки Python](https://python-all.ru/3.12/library/devmode.html#devmode) отображает это предупреждение.546547Добавлено в версии 3.2.548549## Группы исключений550551Следующие классы используются, когда необходимо возбудить несколько несвязанных исключений. Они являются частью иерархии исключений, поэтому их можно обрабатывать с помощью [`except`](https://python-all.ru/3.12/reference/compound_stmts.html#except), как и любые другие исключения. Кроме того, они распознаются [`except*`](https://python-all.ru/3.12/reference/compound_stmts.html#except-star), который сопоставляет их подгруппы на основе типов содержащихся исключений.552553#### `exception ExceptionGroup(msg, excs)`554555#### `exception BaseExceptionGroup(msg, excs)`556557Оба этих типа исключений оборачивают исключения из последовательности `excs`. Параметр `msg` должен быть строкой. Разница между двумя классами в том, что [`BaseExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup) расширяет [`BaseException`](https://python-all.ru/3.12/library/exceptions.html#BaseException) и может оборачивать любые исключения, тогда как [`ExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#ExceptionGroup) расширяет [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception) и может оборачивать только подклассы [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception). Такая конструкция нужна для того, чтобы `except Exception` перехватывал [`ExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#ExceptionGroup), но не [`BaseExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup).558559Конструктор [`BaseExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup) возвращает [`ExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#ExceptionGroup), а не [`BaseExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup), если все содержащиеся исключения являются экземплярами [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception), что позволяет сделать выбор автоматически. Конструктор [`ExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#ExceptionGroup), с другой стороны, возбуждает [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError), если хотя бы одно содержащееся исключение не является подклассом [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception).560561#### `message`562563Аргумент `msg` конструктора. Это атрибут только для чтения.564565#### `exceptions`566567Кортеж исключений из последовательности `excs`, переданной конструктору. Это атрибут только для чтения.568569#### `subgroup(condition)`570571Возвращает группу исключений, содержащую только те исключения из текущей группы, которые соответствуют *условию*, или `None`, если результат пуст.572573Условием может быть функция, принимающая исключение и возвращающая true для тех, что должны быть в подгруппе, или тип исключения, или кортеж типов исключений. Это используется для проверки соответствия тем же способом, что и в предложении `except`.574575Структура вложенности текущего исключения сохраняется в результате, как и значения его полей [`message`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.message), [`__traceback__`](https://python-all.ru/3.12/library/exceptions.html#BaseException.__traceback__), [`__cause__`](https://python-all.ru/3.12/library/exceptions.html#BaseException.__cause__), [`__context__`](https://python-all.ru/3.12/library/exceptions.html#BaseException.__context__) и [`__notes__`](https://python-all.ru/3.12/library/exceptions.html#BaseException.__notes__). Пустые вложенные группы опускаются в результате.576577Условие проверяется для всех исключений во вложенной группе исключений, включая самую верхнюю и любые вложенные группы. Если условие истинно для такой группы исключений, она включается в результат целиком.578579#### `split(condition)`580581Подобно [`subgroup()`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.subgroup), но возвращает пару `(match, rest)`, где `match` – это `subgroup(condition)`, а `rest` – оставшаяся несовпадающая часть.582583#### `derive(excs)`584585Возвращает группу исключений с тем же [`message`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.message), но которая оборачивает исключения в `excs`.586587Этот метод используется [`subgroup()`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.subgroup) и [`split()`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.split), которые применяются в различных контекстах для разделения группы исключений. Подклассу необходимо переопределить его, чтобы [`subgroup()`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.subgroup) и [`split()`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.split) возвращали экземпляры подкласса, а не [`ExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#ExceptionGroup).588589[`subgroup()`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.subgroup) и [`split()`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.split) копируют поля [`__traceback__`](https://python-all.ru/3.12/library/exceptions.html#BaseException.__traceback__), [`__cause__`](https://python-all.ru/3.12/library/exceptions.html#BaseException.__cause__), [`__context__`](https://python-all.ru/3.12/library/exceptions.html#BaseException.__context__) и [`__notes__`](https://python-all.ru/3.12/library/exceptions.html#BaseException.__notes__) из исходной группы исключений в ту, которую возвращает [`derive()`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.derive), поэтому этим полям не требуется обновления [`derive()`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup.derive).590591```pycon592>>> class MyGroup(ExceptionGroup):593...     def derive(self, excs):594...         return MyGroup(self.message, excs)595...596>>> e = MyGroup("eg", [ValueError(1), TypeError(2)])597>>> e.add_note("a note")598>>> e.__context__ = Exception("context")599>>> e.__cause__ = Exception("cause")600>>> try:601...    raise e602... except Exception as e:603...    exc = e604...605>>> match, rest = exc.split(ValueError)606>>> exc, exc.__context__, exc.__cause__, exc.__notes__607(MyGroup('eg', [ValueError(1), TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])608>>> match, match.__context__, match.__cause__, match.__notes__609(MyGroup('eg', [ValueError(1)]), Exception('context'), Exception('cause'), ['a note'])610>>> rest, rest.__context__, rest.__cause__, rest.__notes__611(MyGroup('eg', [TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])612>>> exc.__traceback__ is match.__traceback__ is rest.__traceback__613True614```615616Обратите внимание, что [`BaseExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup) определяет [`__new__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__new__), поэтому подклассам, которым требуется другая сигнатура конструктора, нужно переопределять его, а не [`__init__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__init__). Например, ниже определяется подкласс группы исключений, который принимает exit\_code и строит сообщение группы из него.617618```python619class Errors(ExceptionGroup):620   def __new__(cls, errors, exit_code):621      self = super().__new__(Errors, f"exit code: {exit_code}", errors)622      self.exit_code = exit_code623      return self624625   def derive(self, excs):626      return Errors(excs, self.exit_code)627```628629Подобно [`ExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#ExceptionGroup), любой подкласс [`BaseExceptionGroup`](https://python-all.ru/3.12/library/exceptions.html#BaseExceptionGroup), который также является подклассом [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception), может оборачивать только экземпляры [`Exception`](https://python-all.ru/3.12/library/exceptions.html#Exception).630631Добавлено в версии 3.12.632633## Иерархия исключений634635Иерархия классов для встроенных исключений:636637```text638BaseException639 ├── BaseExceptionGroup640 ├── GeneratorExit641 ├── KeyboardInterrupt642 ├── SystemExit643 └── Exception644      ├── ArithmeticError645      │    ├── FloatingPointError646      │    ├── OverflowError647      │    └── ZeroDivisionError648      ├── AssertionError649      ├── AttributeError650      ├── BufferError651      ├── EOFError652      ├── ExceptionGroup [BaseExceptionGroup]653      ├── ImportError654      │    └── ModuleNotFoundError655      ├── LookupError656      │    ├── IndexError657      │    └── KeyError658      ├── MemoryError659      ├── NameError660      │    └── UnboundLocalError661      ├── OSError662      │    ├── BlockingIOError663      │    ├── ChildProcessError664      │    ├── ConnectionError665      │    │    ├── BrokenPipeError666      │    │    ├── ConnectionAbortedError667      │    │    ├── ConnectionRefusedError668      │    │    └── ConnectionResetError669      │    ├── FileExistsError670      │    ├── FileNotFoundError671      │    ├── InterruptedError672      │    ├── IsADirectoryError673      │    ├── NotADirectoryError674      │    ├── PermissionError675      │    ├── ProcessLookupError676      │    └── TimeoutError677      ├── ReferenceError678      ├── RuntimeError679      │    ├── NotImplementedError680      │    └── RecursionError681      ├── StopAsyncIteration682      ├── StopIteration683      ├── SyntaxError684      │    └── IndentationError685      │         └── TabError686      ├── SystemError687      ├── TypeError688      ├── ValueError689      │    └── UnicodeError690      │         ├── UnicodeDecodeError691      │         ├── UnicodeEncodeError692      │         └── UnicodeTranslateError693      └── Warning694           ├── BytesWarning695           ├── DeprecationWarning696           ├── EncodingWarning697           ├── FutureWarning698           ├── ImportWarning699           ├── PendingDeprecationWarning700           ├── ResourceWarning701           ├── RuntimeWarning702           ├── SyntaxWarning703           ├── UnicodeWarning704           └── UserWarning705```706