# Вбудовані винятки

У Python усі винятки мають бути екземплярами класу, який походить від `BaseException`. У операторі `try` із пунктом `except`, який згадує певний клас, цей пункт також обробляє будь-які класи винятків, похідних від цього класу (але не класи винятків, з яких it походить). Два класи винятків, які не пов’язані через підкласи, ніколи не є еквівалентними, навіть якщо вони мають однакові назви.

The built-in exceptions listed in this chapter can be generated by the interpreter or built-in functions. Except where mentioned, they have an «associated value» indicating the detailed cause of the error. This may be a string or a tuple of several items of information (e.g., an error code and a string explaining the code). The associated value is usually passed as arguments to the exception class’s constructor.

Код користувача може викликати вбудовані винятки. Це можна використовувати для перевірки обробника винятків або для повідомлення про стан помилки «подібно до» ситуації, в якій інтерпретатор викликає той самий виняток; але майте на увазі, що ніщо не завадить коду користувача викликати недоречну помилку.

Вбудовані класи винятків можуть бути підкласами для визначення нових винятків; Програмістам рекомендується отримувати нові винятки з класу `Exception` або одного з його підкласів, а не з `BaseException`. Більше інформації про визначення винятків доступно в підручнику з Python у розділі Винятки, визначені користувачем.

## Контекст винятків

Three attributes on exception objects provide information about the context in which the exception was raised:

BaseException.__context__
BaseException.__cause__
BaseException.__suppress_context__

  When raising a new exception while another exception is already being handled, the new exception’s `__context__` attribute is automatically set to the handled exception. An exception may be handled when an `except` or `finally` clause, or a `with` statement, is used.

  Цей контекст неявної виняткової ситуації можна доповнити явною причиною за допомогою `from` з `raise`:

      raise new_exc from original_exc

  The expression following `from` must be an exception or `None`. It will be set as `__cause__` on the raised exception. Setting `__cause__` also implicitly sets the `__suppress_context__` attribute to `True`, so that using `raise new_exc from None` effectively replaces the old exception with the new one for display purposes (e.g. converting `KeyError` to `AttributeError`), while leaving the old exception available in `__context__` for introspection when debugging.

  The default traceback display code shows these chained exceptions in addition to the traceback for the exception itself. An explicitly chained exception in `__cause__` is always shown when present. An implicitly chained exception in `__context__` is shown only if `__cause__` is `None` and `__suppress_context__` is false.

  У будь-якому випадку сам виняток завжди відображається після будь-яких ланцюжкових винятків, так що останній рядок трасування завжди показує останній виняток, який був викликаний.

## Успадкування від вбудованих винятків

Код користувача може створювати підкласи, які успадковуються від типу винятку. Рекомендується створювати підкласи лише для одного типу винятків за раз, щоб уникнути будь-яких можливих конфліктів між тим, як основи обробляють атрибут `args`, а також через можливу несумісність розташування пам’яті.

Більшість вбудованих винятків реалізовано в 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__

    A writable field that holds the traceback object associated with this exception. See also: Оператор raise.

  add_note(note)

    Add the string `note` to the exception’s notes which appear in the standard traceback after the exception string. A `TypeError` is raised if `note` is not a string.

    Added in version 3.11.

  __notes__

    A list of the notes of this exception, which were added with `add_note()`. This attribute is created when `add_note()` is called.

    Added in version 3.11.

exception Exception

  Усі вбудовані винятки, що не виходять із системи, походять від цього класу. Усі визначені користувачем винятки також мають бути похідними від цього класу.

exception ArithmeticError

  Базовий клас для тих вбудованих винятків, які викликаються для різних арифметичних помилок: `OverflowError`, `ZeroDivisionError`, `FloatingPointError`.

exception BufferError

  Викликається, коли пов’язану операцію buffer не можна виконати.

exception LookupError

  Базовий клас для винятків, які виникають, коли ключ або індекс, використаний у відображенні чи послідовності, недійсний: `IndexError`, `KeyError`. Це можна викликати безпосередньо за допомогою `codecs.lookup()`.

## Конкретні винятки

Наступні винятки є винятками, які зазвичай виникають.

exception AssertionError

  Викликається, коли оператор `assert` не виконується.

exception AttributeError

  Викликається, коли посилання на атрибут (див. Посилання на атрибути) або призначення не вдається. (Якщо об’єкт взагалі не підтримує посилання на атрибути чи призначення атрибутів, виникає `TypeError`.)

  The optional name and obj keyword-only arguments set the corresponding attributes:

  name

    The name of the attribute that was attempted to be accessed.

  obj

    The object that was accessed for the named attribute.

  Змінено в версії 3.10: Додано атрибути `name` і `obj`.

exception EOFError

  Raised when the `input()` function hits an end-of-file condition (EOF) without reading any data. (Note: the `io.IOBase.read()` and `io.IOBase.readline()` methods return an empty string when they hit EOF.)

exception FloatingPointError

  Зараз не використовується.

exception GeneratorExit

  Викликається, коли generator або coroutine закрито; див. `generator.close()` і `coroutine.close()`. Він безпосередньо успадковує `BaseException` замість `Exception`, оскільки технічно це не помилка.

exception ImportError

  Викликається, коли оператор `import` має проблеми при спробі завантажити модуль. Також виникає, коли «зі списку» в `from ... import` має назву, яку неможливо знайти.

  The optional name and path keyword-only arguments set the corresponding attributes:

  name

    The name of the module that was attempted to be imported.

  path

    The path to any file which triggered the exception.

  Змінено в версії 3.3: Додано атрибути `name` і `path`.

exception ModuleNotFoundError

  Підклас `ImportError`, який викликається `import`, коли не вдалося знайти модуль. Він також виникає, коли `None` знайдено в `sys.modules`.

  Added in version 3.6.

exception IndexError

  Викликається, коли індекс послідовності виходить за межі діапазону. (Індекси фрагментів мовчки скорочуються, щоб потрапити в дозволений діапазон; якщо індекс не є цілим числом, виникає `TypeError`.)

exception KeyError

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

exception KeyboardInterrupt

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

  Примітка

  Перехоплення `KeyboardInterrupt` вимагає особливої уваги. Оскільки він може виникати в непередбачуваних моментах, за деяких обставин він може залишити запущену програму в неузгодженому стані. Загалом найкраще дозволити `KeyboardInterrupt` завершити програму якомога швидше або повністю уникати її запуску. (Див. Примітка щодо обробників сигналів і винятків.)

exception MemoryError

  Викликається, коли для операції вичерпується пам’ять, але ситуацію можна врятувати (видаливши деякі об’єкти). Пов’язане значення — це рядок, що вказує, яка (внутрішня) операція вичерпала пам’ять. Зауважте, що через базову архітектуру керування пам’яттю (функція C `malloc()`), інтерпретатор не завжди може повністю вийти з цієї ситуації; незважаючи на це, він викликає виняток, щоб можна було надрукувати зворотне трасування стека, якщо причиною стала програма, що втекла.

exception NameError

  Викликається, коли локальне чи глобальне ім’я не знайдено. Це стосується лише некваліфікованих імен. Пов’язане значення – це повідомлення про помилку, яке містить ім’я, яке не вдалося знайти.

  The optional name keyword-only argument sets the attribute:

  name

    The name of the variable that was attempted to be accessed.

  Змінено в версії 3.10: Додано атрибут `name`.

exception NotImplementedError

  Цей виняток походить від `RuntimeError`. У визначених користувачем базових класах абстрактні методи повинні викликати цей виняток, коли вони вимагають, щоб похідні класи замінили метод, або під час розробки класу, щоб вказати, що справжню реалізацію все ще потрібно додати.

  Примітка

  Його не слід використовувати для вказівки на те, що оператор або метод взагалі не призначений для підтримки — у такому випадку або залиште оператор/метод невизначеними, або, якщо це підклас, установіть для нього значення `None`.

  Застереження

  `NotImplementedError` and `NotImplemented` are not interchangeable. This exception should only be used as described above; see `NotImplemented` for details on correct usage of the built-in constant.

exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])

  Цей виняток виникає, коли системна функція повертає системну помилку, включаючи помилки вводу-виводу, такі як «файл не знайдено» або «диск заповнений» (не для недопустимих типів аргументів або інших випадкових помилок).

  Друга форма конструктора встановлює відповідні атрибути, описані нижче. Атрибути за замовчуванням `None`, якщо не вказано. Для зворотної сумісності, якщо передано три аргументи, атрибут `args` містить лише 2 кортежу з перших двох аргументів конструктора.

  Конструктор часто повертає підклас `OSError`, як описано в розділі OS exceptions нижче. Конкретний підклас залежить від кінцевого значення `errno`. Така поведінка виникає лише під час створення `OSError` безпосередньо або через псевдонім і не успадковується під час створення підкласу.

  errno

    Числовий код помилки зі змінної C `errno`.

  winerror

    У Windows це дає вам рідний код помилки Windows. Тоді атрибут `errno` є приблизним перекладом, у термінах POSIX, цього рідного коду помилки.

    У Windows, якщо аргумент конструктора winerror є цілим числом, атрибут `errno` визначається з коду помилки Windows, а аргумент errno ігнорується. На інших платформах аргумент winerror ігнорується, а атрибут `winerror` не існує.

  strerror

    The corresponding error message, as provided by the operating system. It is formatted by the C functions `perror()` under POSIX, and `FormatMessage()` under Windows.

  filename
  filename2

    Для винятків, які містять шлях до файлової системи (наприклад, `open()` або `os.unlink()`), `filename` — це ім’я файлу, яке передається функції. Для функцій, які включають два шляхи до файлової системи (наприклад, `os.rename()`), `filename2` відповідає другому імені файлу, переданому функції.

  Змінено в версії 3.3: `EnvironmentError`, `IOError`, `WindowsError`, `socket.error`, `select.error` and `mmap.error` have been merged into `OSError`, and the constructor may return a subclass.

  Змінено в версії 3.4: Атрибут `filename` тепер є оригінальним ім’ям файлу, переданим у функцію, замість імені, закодованого або декодованого з filesystem encoding and error handler. Також було додано аргумент і атрибут конструктора filename2.

exception OverflowError

  Raised when the result of an arithmetic operation is too large to be represented. This cannot occur for integers (which would rather raise `MemoryError` than give up). However, for historical reasons, OverflowError is sometimes raised for integers that are outside a required range. Because of the lack of standardization of floating-point exception handling in C, most floating-point operations are not checked.

exception PythonFinalizationError

  This exception is derived from `RuntimeError`. It is raised when an operation is blocked during interpreter shutdown also known as Python finalization.

  Examples of operations which can be blocked with a `PythonFinalizationError` during the Python finalization:

  - Creating a new Python thread.

  - `Joining` a running daemon thread.

  - `os.fork()`,

  - acquiring a lock such as `threading.Lock`, when it is known that the operation would otherwise deadlock.

  See also the `sys.is_finalizing()` function.

  Added in version 3.13: Раніше було викликано звичайне повідомлення `RuntimeError`.

  Змінено в версії 3.14: `threading.Thread.join()` can now raise this exception.

  Змінено в версії 3.15: This exception may be raised when acquiring `threading.Lock()` or `threading.RLock()`.

exception RecursionError

  Цей виняток походить від `RuntimeError`. Він виникає, коли інтерпретатор виявляє, що максимальна глибина рекурсії (див. `sys.getrecursionlimit()`) перевищена.

  Added in version 3.5: Раніше було викликано звичайне повідомлення `RuntimeError`.

exception ReferenceError

  Цей виняток виникає, коли слабкий посилальний проксі-сервер, створений функцією `weakref.proxy()`, використовується для доступу до атрибута референта після його збирання сміття. Щоб дізнатися більше про слабкі посилання, перегляньте модуль `weakref`.

exception RuntimeError

  Викликається, коли виявлено помилку, яка не підпадає під жодну з інших категорій. Пов’язане значення — це рядок, який вказує, що саме пішло не так.

exception StopIteration

  Викликається вбудованою функцією `next()` і методом iterator's `__next__()`, щоб повідомити про те, що ітератор не створює жодних елементів.

  value

    The exception object has a single attribute `value`, which is given as an argument when constructing the exception, and defaults to `None`.

  Коли функція generator або coroutine повертається, створюється новий екземпляр `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

  Must be raised by `__anext__()` method of an asynchronous iterator object to stop the iteration.

  Added in version 3.5.

exception SyntaxError(message, details)

  Викликається, коли аналізатор виявляє синтаксичну помилку. Це може статися в операторі `import`, під час виклику вбудованих функцій `compile()`, `exec()` або `eval()`, або під час читання початкового сценарію або стандартний ввід (також інтерактивно).

  `str()` екземпляра винятку повертає лише повідомлення про помилку. Деталі — це кортеж, члени якого також доступні як окремі атрибути.

  filename

    Назва файлу, у якому сталася синтаксична помилка.

  lineno

    У якому номері рядка у файлі сталася помилка. Це індексовано 1: перший рядок у файлі має `lineno` 1.

  offset

    Стовпець у рядку, де сталася помилка. Це індексується 1: перший символ у рядку має `зміщення` 1.

  text

    Текст вихідного коду, пов’язаний з помилкою.

  end_lineno

    На якому номері рядка у файлі закінчується помилка. Це індексовано 1: перший рядок у файлі має `lineno` 1.

  end_offset

    Стовпець у кінцевому рядку, де сталася помилка, завершується. Це індексується 1: перший символ у рядку має `зміщення` 1.

  Для помилок у полях f-рядка повідомлення має префікс «f-рядок: «, а зсуви є зсувами в тексті, створеному з виразу заміни. Наприклад, компіляція 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

  Raised when the interpreter finds an internal error, but the situation does not look so serious to cause it to abandon all hope. The associated value is a string indicating what went wrong (in low-level terms). In CPython, this could be raised by incorrectly using Python’s C API, such as returning a `NULL` value without an exception set.

  If you’re confident that this exception wasn’t your fault, or the fault of a package you’re using, you should report this to the author or maintainer of your Python interpreter. Be sure to report the version of the Python interpreter (`sys.version`; it is also printed at the start of an interactive Python session), the exact error message (the exception’s associated value) and if possible the source of the program that triggered the error.

exception SystemExit

  This exception is raised by the `sys.exit()` function. It inherits from `BaseException` instead of `Exception` so that it is not accidentally caught by code that catches `Exception`. This allows the exception to properly propagate up and cause the interpreter to exit. When it is not handled, the Python interpreter exits; no stack traceback is printed. The constructor accepts the same optional argument passed to `sys.exit()`. If the value is an integer, it specifies the system exit status (passed to C’s `exit()` function); if it is `None`, the exit status is zero; if it has another type (such as a string), the object’s value is printed and the exit status is one.

  Виклик `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

    Об’єкт, який кодек намагався закодувати або декодувати.

  start

    Перший індекс недійсних даних в `object`.

    This value should not be negative as it is interpreted as an absolute offset but this constraint is not enforced at runtime.

  end

    Індекс після останніх недійсних даних у `object`.

    This value should not be negative as it is interpreted as an absolute offset but this constraint is not enforced at runtime.

exception UnicodeEncodeError

  Викликається, коли під час кодування виникає помилка, пов’язана з Unicode. Це підклас `UnicodeError`.

exception UnicodeDecodeError

  Викликається, коли під час декодування виникає помилка, пов’язана з Unicode. Це підклас `UnicodeError`.

exception UnicodeTranslateError

  Викликається, коли під час перекладу виникає помилка, пов’язана з Unicode. Це підклас `UnicodeError`.

exception ValueError

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

exception ZeroDivisionError

  Викликається, коли другий аргумент операції ділення або модуля дорівнює нулю. Пов’язане значення — це рядок, що вказує тип операндів і операції.

Наступні винятки зберігаються для сумісності з попередніми версіями; починаючи з Python 3.3, вони є псевдонімами `OSError`.

exception EnvironmentError

exception IOError

exception WindowsError

  Доступно лише для Windows.

### Винятки ОС

Наступні винятки є підкласами `OSError`, вони виникають залежно від коду системної помилки.

exception BlockingIOError

  Raised when an operation would block on an object (e.g. socket) set for non-blocking operation. Corresponds to `errno` `EAGAIN`, `EALREADY`, `EWOULDBLOCK` and `EINPROGRESS`.

  Окрім атрибутів `OSError`, `BlockingIOError` може мати ще один атрибут:

  characters_written

    An integer containing the number of bytes written to the stream before it blocked. This attribute is available when using the buffered I/O classes from the `io` module.

exception ChildProcessError

  Raised when an operation on a child process failed. Corresponds to `errno` `ECHILD`.

exception ConnectionError

  Базовий клас для проблем, пов’язаних із з’єднанням.

  Підкласами є `BrokenPipeError`, `ConnectionAbortedError`, `ConnectionRefusedError` і `ConnectionResetError`.

exception BrokenPipeError

  A subclass of `ConnectionError`, raised when trying to write on a pipe while the other end has been closed, or trying to write on a socket which has been shutdown for writing. Corresponds to `errno` `EPIPE` and `ESHUTDOWN`.

exception ConnectionAbortedError

  A subclass of `ConnectionError`, raised when a connection attempt is aborted by the peer. Corresponds to `errno` `ECONNABORTED`.

exception ConnectionRefusedError

  A subclass of `ConnectionError`, raised when a connection attempt is refused by the peer. Corresponds to `errno` `ECONNREFUSED`.

exception ConnectionResetError

  A subclass of `ConnectionError`, raised when a connection is reset by the peer. Corresponds to `errno` `ECONNRESET`.

exception FileExistsError

  Raised when trying to create a file or directory which already exists. Corresponds to `errno` `EEXIST`.

exception FileNotFoundError

  Raised when a file or directory is requested but doesn’t exist. Corresponds to `errno` `ENOENT`.

exception InterruptedError

  Raised when a system call is interrupted by an incoming signal. Corresponds to `errno` `EINTR`.

  Змінено в версії 3.5: Тепер Python повторює системні виклики, коли системний виклик переривається сигналом, за винятком випадків, коли обробник сигналу викликає виняток (обґрунтування див. PEP 475), замість того, щоб викликати `InterruptedError`.

exception IsADirectoryError

  Raised when a file operation (such as `os.remove()`) is requested on a directory. Corresponds to `errno` `EISDIR`.

exception NotADirectoryError

  Raised when a directory operation (such as `os.listdir()`) is requested on something which is not a directory. On most POSIX platforms, it may also be raised if an operation attempts to open or traverse a non-directory file as if it were a directory. Corresponds to `errno` `ENOTDIR`.

exception PermissionError

  Raised when trying to run an operation without the adequate access rights - for example filesystem permissions. Corresponds to `errno` `EACCES`, `EPERM`, and `ENOTCAPABLE`.

  Змінено в версії 3.11.1: WASI’s `ENOTCAPABLE` is now mapped to `PermissionError`.

exception ProcessLookupError

  Raised when a given process doesn’t exist. Corresponds to `errno` `ESRCH`.

exception TimeoutError

  Raised when a system function timed out at the system level. Corresponds to `errno` `ETIMEDOUT`.

Added in version 3.3: Було додано всі наведені вище підкласи `OSError`.

Дивись також

PEP 3151 - Переробка ієрархії винятків ОС та вводу-виводу

## Попередження

Наступні винятки використовуються як категорії попереджень; подробиці дивіться в документації Категорії попереджень.

exception Warning

  Базовий клас для категорій попереджень.

exception UserWarning

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

exception DeprecationWarning

  Базовий клас для попереджень про застарілі функції, якщо ці попередження призначені для інших розробників Python.

  Ігнорується стандартними фільтрами попереджень, окрім модуля `__main__` (PEP 565). Увімкнення режиму Python Development Mode показує це попередження.

  Політика припинення підтримки описана в PEP 387.

exception PendingDeprecationWarning

  Базовий клас для попереджень про функції, які є застарілими та які, як очікується, будуть застарілими в майбутньому, але наразі не застаріли.

  Цей клас рідко використовується, оскільки випромінювання попередження про можливе припинення підтримки є незвичним, а `DeprecationWarning` є кращим для вже активних застарілих функцій.

  Ігнорується стандартними фільтрами попереджень. Увімкнення режиму Python Development Mode показує це попередження.

  Політика припинення підтримки описана в PEP 387.

exception SyntaxWarning

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

  This warning is typically emitted when compiling Python source code, and usually won’t be reported when running already compiled code.

exception RuntimeWarning

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

exception FutureWarning

  Базовий клас для попереджень про застарілі функції, якщо ці попередження призначені для кінцевих користувачів програм, написаних на Python.

exception ImportWarning

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

  Ігнорується стандартними фільтрами попереджень. Увімкнення режиму Python Development Mode показує це попередження.

exception UnicodeWarning

  Базовий клас для попереджень, пов’язаних із Unicode.

exception EncodingWarning

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

  Дивіться Увімкніть EncodingWarning для деталей.

  Added in version 3.10.

exception BytesWarning

  Базовий клас для попереджень, пов’язаних із `bytes` і `bytearray`.

exception ResourceWarning

  Базовий клас для попереджень щодо використання ресурсів.

  Ігнорується стандартними фільтрами попереджень. Увімкнення режиму Python Development Mode показує це попередження.

  Added in version 3.2.

## Exception groups

The following are used when it is necessary to raise multiple unrelated exceptions. They are part of the exception hierarchy so they can be handled with `except` like all other exceptions. In addition, they are recognised by `except*`, which matches their subgroups based on the types of the contained exceptions.

exception ExceptionGroup(msg, excs)

exception BaseExceptionGroup(msg, excs)

  Both of these exception types wrap the exceptions in the sequence `excs`. The `msg` parameter must be a string. The difference between the two classes is that `BaseExceptionGroup` extends `BaseException` and it can wrap any exception, while `ExceptionGroup` extends `Exception` and it can only wrap subclasses of `Exception`. This design is so that `except Exception` catches an `ExceptionGroup` but not `BaseExceptionGroup`.

  The `BaseExceptionGroup` constructor returns an `ExceptionGroup` rather than a `BaseExceptionGroup` if all contained exceptions are `Exception` instances, so it can be used to make the selection automatic. The `ExceptionGroup` constructor, on the other hand, raises a `TypeError` if any contained exception is not an `Exception` subclass.

  Деталі реалізації CPython: The `excs` parameter may be any sequence, but lists and tuples are specifically processed more efficiently here. For optimal performance, pass a tuple as `excs`.

  message

    The `msg` argument to the constructor. This is a read-only attribute.

  exceptions

    A tuple of the exceptions in the `excs` sequence given to the constructor. This is a read-only attribute.

  subgroup(condition)

    Returns an exception group that contains only the exceptions from the current group that match condition, or `None` if the result is empty.

    The condition can be an exception type or tuple of exception types, in which case each exception is checked for a match using the same check that is used in an `except` clause. The condition can also be a callable (other than a type object) that accepts an exception as its single argument and returns true for the exceptions that should be in the subgroup.

    The nesting structure of the current exception is preserved in the result, as are the values of its `message`, `__traceback__`, `__cause__`, `__context__` and `__notes__` fields. Empty nested groups are omitted from the result.

    The condition is checked for all exceptions in the nested exception group, including the top-level and any nested exception groups. If the condition is true for such an exception group, it is included in the result in full.

    Added in version 3.13: `condition` can be any callable which is not a type object.

  split(condition)

    Like `subgroup()`, but returns the pair `(match, rest)` where `match` is `subgroup(condition)` and `rest` is the remaining non-matching part.

  derive(excs)

    Returns an exception group with the same `message`, but which wraps the exceptions in `excs`.

    This method is used by `subgroup()` and `split()`, which are used in various contexts to break up an exception group. A subclass needs to override it in order to make `subgroup()` and `split()` return instances of the subclass rather than `ExceptionGroup`.

    `subgroup()` and `split()` copy the `__traceback__`, `__cause__`, `__context__` and `__notes__` fields from the original exception group to the one returned by `derive()`, so these fields do not need to be updated by `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

  Note that `BaseExceptionGroup` defines `__new__()`, so subclasses that need a different constructor signature need to override that rather than `__init__()`. For example, the following defines an exception group subclass which accepts an exit_code and constructs the group’s message from it.

      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)

  Like `ExceptionGroup`, any subclass of `BaseExceptionGroup` which is also a subclass of `Exception` can only wrap instances of `Exception`.

  Added in version 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