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

exceptions.md

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

1> **Источник:** https://python-all.ru/3.0/c-api/exceptions.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Обработка исключений89Функции, описанные в этой главе, позволяют обрабатывать и возбуждать исключения Python. Важно понимать некоторые основы обработки исключений в Python. Механизм отчасти напоминает переменную `errno` в Unix: существует глобальный индикатор (по потоку) последней произошедшей ошибки. Большинство функций не сбрасывают его при успехе, но устанавливают, указывая причину ошибки при неудаче. Также большинство функций возвращают индикатор ошибки, обычно *NULL*, если они должны возвращать указатель, или `-1`, если возвращают целое число (исключение: функции `PyArg_*` возвращают `1` при успехе и `0` при неудаче).1011Когда функция должна завершиться ошибкой, потому что вызванная ей функция завершилась ошибкой, она обычно не устанавливает индикатор ошибки; его уже установила вызванная функция. Она отвечает либо за обработку ошибки и очистку исключения, либо за возврат после освобождения всех удерживаемых ресурсов (таких как ссылки на объекты или выделенная память); она *не* должна продолжать нормальное выполнение, если не готова обработать ошибку. При возврате из-за ошибки важно указать вызывающему коду, что ошибка была установлена. Если ошибка не обрабатывается или не аккуратно распространяется, последующие вызовы Python/C API могут вести себя не так, как задумано, и могут отказать загадочным образом.1213Индикатор ошибки состоит из трёх объектов Python, соответствующих результату вызова `sys.exc_info()`. Существуют функции API для взаимодействия с индикатором ошибки разными способами. Для каждого потока предусмотрен отдельный индикатор ошибки.1415**\[PyErr\_Print\]void `PyErr_Print`()**1617Выводит стандартную трассировку в1819`sys.stderr`2021и очищает индикатор ошибки. Вызывайте эту функцию только при установленном индикаторе ошибки (иначе возникнет фатальная ошибка!).2223**\[PyErr\_Occurred\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyErr_Occurred`()**2425*Возвращаемое значение: заимствованная ссылка.*2627Проверяет, установлен ли индикатор ошибки. Если установлен, возвращает *тип* исключения (первый аргумент последнего вызова одной из функций `PyErr_Set*` или [`PyErr_Restore`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_Restore)). Если не установлен, возвращает *NULL*. Возвращаемое значение не находится в вашем владении, поэтому не нужно вызывать [`Py_DECREF`](https://python-all.ru/3.0/c-api/refcounting.html#Py_DECREF) для него.2829> **Примечание**30>31> Не сравнивайте возвращаемое значение с конкретным исключением; вместо этого используйте [`PyErr_ExceptionMatches`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_ExceptionMatches), показанную ниже. (Сравнение может легко оказаться неверным, поскольку исключение может быть экземпляром, а не классом, в случае классового исключения, или может быть подклассом ожидаемого исключения.)3233**\[PyErr\_ExceptionMatches\]int `PyErr_ExceptionMatches`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*exc*)**3435Эквивалентно3637`PyErr_GivenExceptionMatches(PyErr_Occurred(), exc)`3839. Функцию следует вызывать только тогда, когда исключение действительно установлено; в противном случае возникнет нарушение доступа к памяти.4041**\[PyErr\_GivenExceptionMatches\]int `PyErr_GivenExceptionMatches`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*given*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*exc*)**4243Возвращает истину, если исключение4445*given*4647соответствует исключению в4849*exc*5051. Если5253*exc*5455– объект класса, также возвращает истину, когда5657*given*5859является экземпляром подкласса. Если6061*exc*6263– кортеж, выполняется поиск совпадения по всем исключениям кортежа (и рекурсивно по вложенным кортежам).6465**\[PyErr\_NormalizeException\]void `PyErr_NormalizeException`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\*\*exc, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\*\*val, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\*\*tb)**6667При определенных обстоятельствах значения, возвращаемые6869[`PyErr_Fetch`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_Fetch)7071(см. ниже), могут быть «ненормализованными», то есть7273`*exc`7475является объектом класса, а7677`*val`7879не является экземпляром того же класса. Эта функция может использоваться для создания экземпляра класса в таком случае. Если значения уже нормализованы, ничего не происходит. Отложенная нормализация реализована для повышения производительности.8081**\[PyErr\_Clear\]void `PyErr_Clear`()**8283Очищает индикатор ошибки. Если индикатор ошибки не установлен, эффекта нет.8485**\[PyErr\_Fetch\]void `PyErr_Fetch`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*\*ptype*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*\*pvalue*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*\*ptraceback*)**8687Извлекает индикатор ошибки в три переменные, адреса которых передаются. Если индикатор ошибки не установлен, устанавливает все три переменные в *NULL*. Если установлен, он будет очищен, и вы получаете владение ссылкой на каждый извлечённый объект. Значение и объект traceback могут быть *NULL*, даже если объект типа не NULL.8889> **Примечание**90>91> Эта функция обычно используется только кодом, которому нужно обрабатывать исключения, или кодом, которому требуется временно сохранить и восстановить индикатор ошибки.9293**\[PyErr\_Restore\]void `PyErr_Restore`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*type*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*value*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*traceback*)**9495Set the error indicator from the three objects. If the error indicator is already set, it is cleared first. If the objects are *NULL*, the error indicator is cleared. Do not pass a *NULL* type and non-*NULL* value or traceback. The exception type should be a class. Do not pass an invalid exception type or value. (Violating these rules will cause subtle problems later.) This call takes away a reference to each object: you must own a reference to each object before the call and after the call you no longer own these references. (If you don’t understand this, don’t use this function. I warned you.)9697> **Примечание**98>99> Эта функция обычно используется только кодом, которому нужно временно сохранить и восстановить индикатор ошибки; используйте [`PyErr_Fetch`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_Fetch) для сохранения текущего состояния исключения.100101**\[PyErr\_SetString\]void `PyErr_SetString`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*type*, const char *\*message*)**102103Это наиболее распространённый способ установки индикатора ошибки. Первый аргумент задаёт тип исключения; обычно это одно из стандартных исключений, например104105`PyExc_RuntimeError`106107. Увеличивать его счётчик ссылок не требуется. Второй аргумент – сообщение об ошибке; оно преобразуется в строковый объект.108109**\[PyErr\_SetObject\]void `PyErr_SetObject`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*type*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*value*)**110111Эта функция похожа на112113[`PyErr_SetString`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_SetString)114115, но позволяет указать произвольный объект Python в качестве «значения» исключения.116117**\[PyErr\_Format\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyErr_Format`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*exception*, const char *\*format*, ...)**118119*Возвращаемое значение: всегда NULL.*120121Эта функция устанавливает индикатор ошибки и возвращает *NULL*. Параметр *exception* должен быть исключением Python (классом, а не экземпляром). Параметр *format* должен быть строкой, содержащей коды формата, аналогично `printf`. Часть `width.precision` перед кодом формата разбирается, но часть ширины игнорируется.122123| Символы формата | Тип | Описание |124| --- | --- | --- |125| `%%` | *н/д* | Буквальный символ %. |126| `%c` | int | Одиночный символ, представленный как C int. |127| `%d` | int | Полностью эквивалентно `printf("%d")`. |128| `%u` | беззнаковый int | Полностью эквивалентно `printf("%u")`. |129| `%ld` | long | Полностью эквивалентно `printf("%ld")`. |130| `%lu` | беззнаковый long | Полностью эквивалентно `printf("%lu")`. |131| `%zd` | Py\_ssize\_t | Полностью эквивалентно `printf("%zd")`. |132| `%zu` | size\_t | Полностью эквивалентно `printf("%zu")`. |133| `%i` | int | Полностью эквивалентно `printf("%i")`. |134| `%x` | int | Полностью эквивалентно `printf("%x")`. |135| `%s` | char\* | Нуль-терминированный массив символов C. |136| `%p` | void\* | Шестнадцатеричное представление указателя C. В основном эквивалентно `printf("%p")` за исключением того, что гарантированно начинается с литерала `0x` независимо от того, что выдает `printf` на данной платформе. |137138Нераспознанный символ формата приводит к тому, что вся оставшаяся строка формата копируется как есть в результирующую строку, а все лишние аргументы отбрасываются.139140**\[PyErr\_SetNone\]void `PyErr_SetNone`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*type*)**141142Это сокращённая запись для143144`PyErr_SetObject(type, Py_None)`145146.147148**\[PyErr\_BadArgument\]int `PyErr_BadArgument`()**149150Это сокращённая запись для151152`PyErr_SetString(PyExc_TypeError, message)`153154, где155156*message*157158указывает, что встроенная операция была вызвана с недопустимым аргументом. В основном используется внутри.159160**\[PyErr\_NoMemory\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyErr_NoMemory`()**161162*Возвращаемое значение: всегда NULL.*163164Это сокращённая запись для `PyErr_SetNone(PyExc_MemoryError)`; она возвращает *NULL*, чтобы функция выделения объекта могла написать `return PyErr_NoMemory();` при нехватке памяти.165166**\[PyErr\_SetFromErrno\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyErr_SetFromErrno`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*type*)**167168*Возвращаемое значение: всегда NULL.*169170Это удобная функция для возбуждения исключения, когда библиотечная функция C вернула ошибку и установила переменную C `errno`. Она создаёт объект кортежа, первый элемент которого – целочисленное значение `errno`, а второй – соответствующее сообщение об ошибке (полученное из `strerror`), а затем вызывает `PyErr_SetObject(type, object)`. В Unix, когда значение `errno` равно `EINTR`, что указывает на прерванный системный вызов, эта функция вызывает [`PyErr_CheckSignals`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_CheckSignals), и если та установила индикатор ошибки, оставляет его установленным. Функция всегда возвращает *NULL*, поэтому функция-обёртка вокруг системного вызова может написать `return PyErr_SetFromErrno(type);`, когда системный вызов возвращает ошибку.171172**\[PyErr\_SetFromErrnoWithFilename\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyErr_SetFromErrnoWithFilename`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*type*, const char *\*filename*)**173174*Возвращаемое значение: всегда NULL.*175176Аналогична [`PyErr_SetFromErrno`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_SetFromErrno), с дополнительным поведением: если *filename* не равен *NULL*, он передаётся конструктору *type* в качестве третьего параметра. В случае таких исключений, как [`IOError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.IOError) и [`OSError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OSError), это используется для определения атрибута `filename` экземпляра исключения.177178**\[PyErr\_SetFromWindowsErr\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyErr_SetFromWindowsErr`(int *ierr*)**179180*Возвращаемое значение: всегда NULL.*181182Это удобная функция для возбуждения [`WindowsError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.WindowsError). Если вызвана с *ierr* равным `0`, используется код ошибки, возвращённый вызовом `GetLastError`. Она вызывает функцию Win32 `FormatMessage` для получения Windows-описания кода ошибки, заданного *ierr* или `GetLastError`, затем создаёт объект кортежа, первый элемент которого – значение *ierr*, а второй – соответствующее сообщение об ошибке (полученное из `FormatMessage`), и затем вызывает `PyErr_SetObject(PyExc_WindowsError, object)`. Эта функция всегда возвращает *NULL*. Доступность: Windows.183184**\[PyErr\_SetExcFromWindowsErr\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyErr_SetExcFromWindowsErr`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*type*, int *ierr*)**185186*Возвращаемое значение: всегда NULL.*187188Аналогична [`PyErr_SetFromWindowsErr`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_SetFromWindowsErr), с дополнительным параметром, указывающим тип возбуждаемого исключения. Доступность: Windows.189190**\[PyErr\_SetFromWindowsErrWithFilename\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyErr_SetFromWindowsErrWithFilename`(int *ierr*, const char *\*filename*)**191192*Возвращаемое значение: всегда NULL.*193194Аналогична [`PyErr_SetFromWindowsErr`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_SetFromWindowsErr), с дополнительным поведением: если *filename* не равен *NULL*, он передаётся конструктору [`WindowsError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.WindowsError) в качестве третьего параметра. Доступность: Windows.195196**\[PyErr\_SetExcFromWindowsErrWithFilename\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyErr_SetExcFromWindowsErrWithFilename`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*type*, int *ierr*, char *\*filename*)**197198*Возвращаемое значение: всегда NULL.*199200Аналогична [`PyErr_SetFromWindowsErrWithFilename`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_SetFromWindowsErrWithFilename), с дополнительным параметром, указывающим тип возбуждаемого исключения. Доступность: Windows.201202**\[PyErr\_BadInternalCall\]void `PyErr_BadInternalCall`()**203204Это сокращённая форма для205206`PyErr_SetString(PyExc_SystemError, message)`207208, где209210*message*211212указывает, что внутренняя операция (например, функция Python/C API) была вызвана с недопустимым аргументом. В основном используется внутри.213214**\[PyErr\_WarnEx\]int `PyErr_WarnEx`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*category*, char *\*message*, int *stacklevel*)**215216Выдаёт предупреждение. Аргумент *category* – это категория предупреждения (см. ниже) или *NULL*; аргумент *message* – строка сообщения. *stacklevel* – это положительное число, задающее количество стековых фреймов; предупреждение будет выдано из текущей исполняемой строки кода в этом стековом фрейме. Значение *stacklevel* равное 1 означает функцию, вызывающую [`PyErr_WarnEx`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_WarnEx), 2 – функцию выше неё, и так далее.217218Эта функция обычно выводит предупреждение в *sys.stderr*; однако пользователь может указать, что предупреждения должны превращаться в ошибки, и в этом случае она возбуждает исключение. Также возможно, что функция возбуждает исключение из-за проблемы в механизме предупреждений (реализация импортирует модуль [`warnings`](https://python-all.ru/3.0/library/warnings.html#module-warnings) для выполнения основной работы). Возвращаемое значение – `0`, если исключение не возбуждено, или `-1`, если исключение возбуждено. (Нельзя определить, было ли сообщение предупреждения на самом деле напечатано, а также причину исключения; это сделано намеренно.) Если возбуждено исключение, вызывающий код должен выполнить обычную обработку исключения (например, [`Py_DECREF`](https://python-all.ru/3.0/c-api/refcounting.html#Py_DECREF) принадлежащие ссылки и вернуть значение ошибки).219220Категории предупреждений должны быть подклассами `Warning`; категория предупреждения по умолчанию – `RuntimeWarning`. Стандартные категории предупреждений Python доступны как глобальные переменные, имена которых – `PyExc_`, за которым следует имя исключения Python. Они имеют тип [`PyObject*`](https://python-all.ru/3.0/c-api/structures.html#PyObject); все они являются объектами классов. Их имена: `PyExc_Warning`, `PyExc_UserWarning`, `PyExc_UnicodeWarning`, `PyExc_DeprecationWarning`, `PyExc_SyntaxWarning`, `PyExc_RuntimeWarning` и `PyExc_FutureWarning`. `PyExc_Warning` является подклассом `PyExc_Exception`; остальные категории предупреждений являются подклассами `PyExc_Warning`.221222Информацию об управлении предупреждениями см. в документации модуля [`warnings`](https://python-all.ru/3.0/library/warnings.html#module-warnings) и опции [*-W*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-W) в документации командной строки. C API для управления предупреждениями не существует.223224**\[PyErr\_WarnExplicit\]int `PyErr_WarnExplicit`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*category*, const char *\*message*, const char *\*filename*, int *lineno*, const char *\*module*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*registry*)**225226Выдаёт предупреждение с явным контролем всех атрибутов предупреждения. Это простая обёртка вокруг функции Python227228[`warnings.warn_explicit()`](https://python-all.ru/3.0/library/warnings.html#warnings.warn_explicit)229230, см. описание там. Аргументы231232*module*233234и235236*registry*237238могут быть установлены в239240*NULL*241242для получения эффекта по умолчанию, как описано там.243244**\[PyErr\_CheckSignals\]int `PyErr_CheckSignals`()**245246Эта функция взаимодействует с обработкой сигналов Python. Она проверяет, был ли отправлен сигнал процессам, и если да, вызывает соответствующий обработчик сигнала. Если модуль [`signal`](https://python-all.ru/3.0/library/signal.html#module-signal) поддерживается, может быть вызван обработчик сигнала, написанный на Python. Во всех случаях действие по умолчанию для `SIGINT` – возбуждение исключения [`KeyboardInterrupt`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyboardInterrupt). Если исключение возбуждено, устанавливается индикатор ошибки, и функция возвращает `-1`; в противном случае функция возвращает `0`. Индикатор ошибки может быть сброшен или не сброшен, если он был установлен ранее.247248**\[PyErr\_SetInterrupt\]void `PyErr_SetInterrupt`()**249250Эта функция имитирует поступление сигнала `SIGINT` – при следующем вызове [`PyErr_CheckSignals`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_CheckSignals) будет возбуждено [`KeyboardInterrupt`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyboardInterrupt). Функцию можно вызывать, не удерживая блокировку интерпретатора.251252**\[PySignal\_SetWakeupFd\]int `PySignal_SetWakeupFd`(int *fd*)**253254Эта вспомогательная функция задаёт файловый дескриптор, в который будет записан байт255256`'\0'`257258при получении сигнала. Возвращает предыдущий такой файловый дескриптор. Значение259260`-1`261262отключает эту возможность; это начальное состояние. Эквивалентно263264[`signal.set_wakeup_fd()`](https://python-all.ru/3.0/library/signal.html#signal.set_wakeup_fd)265266в Python, но без проверки ошибок.267268*fd*269270должен быть корректным файловым дескриптором. Функцию следует вызывать только из главного потока.271272**\[PyErr\_NewException\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyErr_NewException`(char *\*name*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*base*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*dict*)**273274*Возвращаемое значение: новая ссылка.*275276Эта вспомогательная функция создаёт и возвращает новый объект исключения. Аргумент *name* должен задавать имя нового исключения – строку C в формате `module.class`. Аргументы *base* и *dict* обычно равны *NULL*. Функция создаёт объект класса, производного от [`Exception`](https://python-all.ru/3.0/library/exceptions.html#exceptions.Exception) (на C доступен как `PyExc_Exception`).277278Атрибут `__module__` нового класса устанавливается в первую часть (до последней точки) аргумента *name*, а имя класса – в последнюю часть (после последней точки). Аргумент *base* можно использовать для указания альтернативных базовых классов; это может быть как один класс, так и кортеж классов. Аргумент *dict* можно использовать для указания словаря переменных и методов класса.279280**\[PyErr\_WriteUnraisable\]void `PyErr_WriteUnraisable`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*obj*)**281282Эта вспомогательная функция выводит предупреждение в `sys.stderr`, когда исключение установлено, но интерпретатор не может его фактически возбудить. Используется, например, когда исключение возникает в методе [`__del__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__del__).283284Функция вызывается с одним аргументом *obj*, который идентифицирует контекст, в котором возникло не вызываемое исключение. В сообщении предупреждения будет выведено repr от *obj*.285286## Стандартные исключения287288Все стандартные исключения Python доступны как глобальные переменные, имена которых состоят из `PyExc_`, за которым следует имя исключения Python. Они имеют тип [`PyObject*`](https://python-all.ru/3.0/c-api/structures.html#PyObject); все они являются объектами классов. Для полноты картины, вот все переменные:289290| Имя в C | Имя в Python | Примечания |291| --- | --- | --- |292| `PyExc_BaseException` | [`BaseException`](https://python-all.ru/3.0/library/exceptions.html#exceptions.BaseException) | (1) |293| `PyExc_Exception` | [`исключение`](https://python-all.ru/3.0/library/exceptions.html#exceptions.Exception) | (1) |294| `PyExc_ArithmeticError` | [`ArithmeticError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ArithmeticError) | (1) |295| `PyExc_LookupError` | [`LookupError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.LookupError) | (1) |296| `PyExc_AssertionError` | [`AssertionError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.AssertionError) |  |297| `PyExc_AttributeError` | [`AttributeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.AttributeError) |  |298| `PyExc_EOFError` | [`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError) |  |299| `PyExc_EnvironmentError` | [`EnvironmentError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EnvironmentError) | (1) |300| `PyExc_FloatingPointError` | [`FloatingPointError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.FloatingPointError) |  |301| `PyExc_IOError` | [`IOError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.IOError) |  |302| `PyExc_ImportError` | [`ImportError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ImportError) |  |303| `PyExc_IndexError` | [`IndexError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.IndexError) |  |304| `PyExc_KeyError` | [`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError) |  |305| `PyExc_KeyboardInterrupt` | [`KeyboardInterrupt`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyboardInterrupt) |  |306| `PyExc_MemoryError` | [`MemoryError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.MemoryError) |  |307| `PyExc_NameError` | [`NameError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.NameError) |  |308| `PyExc_NotImplementedError` | [`NotImplementedError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.NotImplementedError) |  |309| `PyExc_OSError` | [`OSError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OSError) |  |310| `PyExc_OverflowError` | [`OverflowError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OverflowError) |  |311| `PyExc_ReferenceError` | [`ReferenceError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ReferenceError) | (2) |312| `PyExc_RuntimeError` | [`RuntimeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.RuntimeError) |  |313| `PyExc_SyntaxError` | [`SyntaxError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.SyntaxError) |  |314| `PyExc_SystemError` | [`SystemError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.SystemError) |  |315| `PyExc_SystemExit` | [`SystemExit`](https://python-all.ru/3.0/library/exceptions.html#exceptions.SystemExit) |  |316| `PyExc_TypeError` | [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError) |  |317| `PyExc_ValueError` | [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError) |  |318| `PyExc_WindowsError` | [`WindowsError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.WindowsError) | (3) |319| `PyExc_ZeroDivisionError` | [`ZeroDivisionError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ZeroDivisionError) |  |320321Примечания:3223231. Это базовый класс для других стандартных исключений.3242. То же самое, что [`weakref.ReferenceError`](https://python-all.ru/3.0/library/weakref.html#weakref.ReferenceError).3253. Определён только в Windows; код, использующий это, должен проверять, определён ли макрос препроцессора `MS_WINDOWS`.326