exceptions.md
1> **Источник:** https://python-all.ru/3.0/library/exceptions.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Встроенные исключения89Исключения должны быть объектами классов. Исключения определяются в модуле `exceptions`. Этот модуль никогда не нужно импортировать явно: исключения доступны как во встроенном пространстве имён, так и в модуле `exceptions`.1011Для исключений-классов в операторе [`try`](https://python-all.ru/3.0/reference/compound_stmts.html#try) с предложением [`except`](https://python-all.ru/3.0/reference/compound_stmts.html#except), указывающим конкретный класс, это предложение обрабатывает также любые классы исключений, производные от этого класса (но не классы, от которых *он* производен). Два класса исключений, не связанные отношением наследования, никогда не эквивалентны, даже если имеют одинаковые имена.1213Перечисленные ниже встроенные исключения могут порождаться интерпретатором или встроенными функциями. Если не указано иное, они имеют «связанное значение», указывающее на подробную причину ошибки. Это может быть строка или кортеж, содержащий несколько элементов информации (например, код ошибки и строку с её пояснением). Связанное значение – это второй аргумент оператора [`raise`](https://python-all.ru/3.0/reference/simple_stmts.html#raise). Если класс исключения происходит от стандартного корневого класса [`BaseException`](https://python-all.ru/3.0/library/exceptions.html#exceptions.BaseException), связанное значение хранится в атрибуте `args` экземпляра исключения.1415Пользовательский код может возбуждать встроенные исключения. Это можно использовать для проверки обработчика исключений или для сообщения об ошибке «точно так же», как если бы интерпретатор возбудил то же самое исключение; однако следует помнить, что ничто не мешает пользовательскому коду возбудить неподходящую ошибку.1617Встроенные классы исключений можно наследовать для определения новых исключений; программистам рекомендуется, по крайней мере, выводить новые исключения из класса [`Exception`](https://python-all.ru/3.0/library/exceptions.html#exceptions.Exception), а не [`BaseException`](https://python-all.ru/3.0/library/exceptions.html#exceptions.BaseException). Дополнительную информацию об определении исключений можно найти в учебнике Python в разделе [*Пользовательские исключения*](https://python-all.ru/3.0/tutorial/errors.html#tut-userexceptions).1819Следующие исключения используются только как базовые классы для других исключений.2021#### `[exceptions.BaseException]exception BaseException`2223Базовый класс для всех встроенных исключений. Он не предназначен для непосредственного наследования пользовательскими классами (для этого используйте2425[`Exception`](https://python-all.ru/3.0/library/exceptions.html#exceptions.Exception)2627). Если2829[`str()`](https://python-all.ru/3.0/library/functions.html#str)3031или3233`unicode()`3435вызывается для экземпляра этого класса, возвращается строковое представление его аргумента (или аргументов), либо пустая строка, если аргументов не было. Все аргументы хранятся в3637`args`3839в виде кортежа.4041#### `[exceptions.Exception]exception Exception`4243Все встроенные исключения, не приводящие к завершению системы, являются производными от этого класса. Все определённые пользователем исключения также должны наследоваться от этого класса.4445#### `[exceptions.ArithmeticError]exception ArithmeticError`4647Базовый класс для тех встроенных исключений, которые возбуждаются при различных арифметических ошибках:4849[`OverflowError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OverflowError)5051,5253[`ZeroDivisionError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ZeroDivisionError)5455,5657[`FloatingPointError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.FloatingPointError)5859.6061#### `[exceptions.LookupError]exception LookupError`6263Базовый класс для исключений, которые возникают при неверном ключе или индексе, используемом в отображении или последовательности:6465[`IndexError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.IndexError)6667,6869[`KeyError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyError)7071. Может также возбуждаться напрямую функцией7273[`sys.setdefaultencoding()`](https://python-all.ru/3.0/library/sys.html#sys.setdefaultencoding)7475.7677#### `[exceptions.EnvironmentError]exception EnvironmentError`7879Базовый класс для исключений, которые могут возникать вне системы Python: [`IOError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.IOError), [`OSError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OSError). Когда исключения этого типа создаются с кортежем из 2 элементов, первый элемент доступен через атрибут `errno` экземпляра (предполагается, что это номер ошибки), а второй элемент – через атрибут `strerror` (обычно это соответствующее сообщение об ошибке). Сам кортеж также доступен через атрибут `args`.8081Когда исключение [`EnvironmentError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EnvironmentError) создаётся с кортежем из трёх элементов, первые два элемента доступны, как описано выше, а третий элемент – в атрибуте `filename`. Однако для обратной совместимости атрибут `args` содержит только кортеж из двух первых аргументов конструктора.8283Атрибут `filename` равен `None`, когда это исключение создано с количеством аргументов, отличным от 3. Атрибуты `errno` и `strerror` также равны `None`, когда экземпляр был создан с количеством аргументов, отличным от 2 или 3. В последнем случае `args` содержит аргументы конструктора как есть в виде кортежа.8485Следующие исключения – это те, которые действительно возбуждаются.8687#### `[exceptions.AssertionError]exception AssertionError`8889Возбуждается, когда инструкция [`assert`](https://python-all.ru/3.0/reference/simple_stmts.html#assert) завершается неудачей.9091#### `[exceptions.AttributeError]exception AttributeError`9293Возбуждается, когда обращение к атрибуту (см.9495[*Обращения к атрибутам*](https://python-all.ru/3.0/reference/expressions.html#attribute-references)9697) или присваивание атрибута завершается неудачей. (Если объект вообще не поддерживает обращение к атрибутам или их присваивание, возбуждается9899[`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError)100101.)102103#### `[exceptions.EOFError]exception EOFError`104105Возбуждается, когда одна из встроенных функций (106107[`input()`](https://python-all.ru/3.0/library/functions.html#input)108109или110111`raw_input()`112113) достигает конца файла (EOF), не прочитав ни одного байта. (Примечание: методы114115[`file.read()`](https://python-all.ru/3.0/library/stdtypes.html#file.read)116117и118119[`file.readline()`](https://python-all.ru/3.0/library/stdtypes.html#file.readline)120121возвращают пустую строку при достижении EOF.)122123#### `[exceptions.FloatingPointError]exception FloatingPointError`124125Возбуждается при сбое операции с плавающей запятой. Это исключение всегда определено, но может быть возбуждено только если Python сконфигурирован с опцией126127*--with-fpectl*128129, или в файле130131`pyconfig.h`132133определён символ134135`WANT_SIGFPE_HANDLER`136137.138139#### `[exceptions.GeneratorExit]exception GeneratorExit`140141Возбуждается при вызове метода142143`close()`144145у146147[*генератора*](https://python-all.ru/3.0/glossary.html#term-generator)148149. Он напрямую наследуется от150151[`BaseException`](https://python-all.ru/3.0/library/exceptions.html#exceptions.BaseException)152153, а не от154155[`Exception`](https://python-all.ru/3.0/library/exceptions.html#exceptions.Exception)156157, поскольку технически не является ошибкой.158159#### `[exceptions.IOError]exception IOError`160161Возбуждается, когда операция ввода-вывода (например, встроенные функции [`print()`](https://python-all.ru/3.0/library/functions.html#print) или [`open()`](https://python-all.ru/3.0/library/functions.html#open), либо метод файлового объекта) завершается неудачей по причине, связанной с вводом-выводом, например, «файл не найден» или «диск переполнен».162163Этот класс является производным от [`EnvironmentError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EnvironmentError). См. обсуждение выше для получения дополнительной информации об атрибутах экземпляров исключений.164165#### `[exceptions.ImportError]exception ImportError`166167Возбуждается, когда инструкция168169[`import`](https://python-all.ru/3.0/reference/simple_stmts.html#import)170171не может найти определение модуля, или когда конструкция172173`from ... import`174175не может найти имя, которое должно быть импортировано.176177#### `[exceptions.IndexError]exception IndexError`178179Вызывается, когда индекс последовательности выходит за пределы диапазона. (Индексы срезов молча усекаются до допустимого диапазона; если индекс не является целым числом, вызывается180181[`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError)182183.)184185#### `[exceptions.KeyError]exception KeyError`186187Вызывается, когда ключ отображения (словаря) не найден среди существующих ключей.188189#### `[exceptions.KeyboardInterrupt]exception KeyboardInterrupt`190191Вызывается, когда пользователь нажимает клавишу прерывания (обычно192193`Control-C`194195или196197`Delete`198199). Во время выполнения регулярно проверяется наличие прерываний. Исключение наследуется от200201[`BaseException`](https://python-all.ru/3.0/library/exceptions.html#exceptions.BaseException)202203, чтобы случайно не быть перехваченным кодом, который ловит204205[`Exception`](https://python-all.ru/3.0/library/exceptions.html#exceptions.Exception)206207, и тем самым не помешать выходу интерпретатора.208209#### `[exceptions.MemoryError]exception MemoryError`210211Возбуждается, когда у операции заканчивается память, но ситуацию всё ещё можно исправить (удалив некоторые объекты). Связанное значение – строка, указывающая, какая именно (внутренняя) операция исчерпала память. Обратите внимание: из-за лежащей в основе архитектуры управления памятью (функция C212213`malloc`214215) интерпретатор может не всегда полностью восстановиться после такой ситуации; тем не менее он возбуждает исключение, чтобы можно было вывести трассировку стека на случай, если причиной была вышедшая из-под контроля программа.216217#### `[exceptions.NameError]exception NameError`218219Вызывается, когда не найдено локальное или глобальное имя. Это относится только к неквалифицированным именам. Связанное значение – сообщение об ошибке, которое включает имя, которое не удалось найти.220221#### `[exceptions.NotImplementedError]exception NotImplementedError`222223Это исключение происходит от224225[`RuntimeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.RuntimeError)226227. В пользовательских базовых классах абстрактные методы должны вызывать это исключение, когда они требуют от производных классов переопределить метод.228229#### `[exceptions.OSError]exception OSError`230231Это исключение является производным от [`EnvironmentError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EnvironmentError). Оно возбуждается, когда функция возвращает системную ошибку (не для недопустимых типов аргументов или прочих случайных ошибок). Атрибут `errno` – числовой код ошибки из модуля `errno`, а атрибут `strerror` – соответствующая строка, которая была бы выведена функцией C `perror`. Смотрите модуль [`errno`](https://python-all.ru/3.0/library/errno.html#module-errno), который содержит имена для кодов ошибок, определённых базовой операционной системой.232233Для исключений, связанных с путём файловой системы (например, `chdir()` или `unlink()`), экземпляр исключения будет содержать третий атрибут, `filename`, который является именем файла, переданным функции.234235#### `[exceptions.OverflowError]exception OverflowError`236237Возбуждается, когда результат арифметической операции слишком велик для представления. Это не может произойти для целых чисел (которые скорее возбудят238239[`MemoryError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.MemoryError)240241, чем сдадутся). Из-за отсутствия стандартизации обработки исключений с плавающей запятой в C большинство операций с плавающей запятой также не проверяются.242243#### `[exceptions.ReferenceError]exception ReferenceError`244245Это исключение вызывается, когда прокси слабой ссылки, созданный функцией246247[`weakref.proxy()`](https://python-all.ru/3.0/library/weakref.html#weakref.proxy)248249, используется для доступа к атрибуту объекта после его сборки мусора. Для получения дополнительной информации о слабых ссылках см. модуль250251[`weakref`](https://python-all.ru/3.0/library/weakref.html#module-weakref)252253.254255#### `[exceptions.RuntimeError]exception RuntimeError`256257Возникает, когда обнаружена ошибка, не подпадающая ни под одну из других категорий. Связанное значение – это строка, указывающая, что именно пошло не так. (Это исключение в основном является пережитком предыдущей версии интерпретатора; сейчас оно используется нечасто.)258259#### `[exceptions.StopIteration]exception StopIteration`260261Возбуждается встроенной262263[`next()`](https://python-all.ru/3.0/library/functions.html#next)264265и266267[*итератора*](https://python-all.ru/3.0/glossary.html#term-iterator)268269`__next__()`270271методом для сигнализации о том, что значений больше нет.272273#### `[exceptions.SyntaxError]exception SyntaxError`274275Возбуждается, когда синтаксический анализатор обнаруживает синтаксическую ошибку. Это может произойти в операторе [`import`](https://python-all.ru/3.0/reference/simple_stmts.html#import), при вызове встроенных функций [`exec()`](https://python-all.ru/3.0/library/functions.html#exec) или [`eval()`](https://python-all.ru/3.0/library/functions.html#eval), а также при чтении начального скрипта или стандартного ввода (в том числе в интерактивном режиме).276277Экземпляры этого класса имеют атрибуты `filename`, `lineno`, `offset` и `text` для удобного доступа к подробностям. [`str()`](https://python-all.ru/3.0/library/functions.html#str) от экземпляра исключения возвращает только сообщение.278279#### `[exceptions.SystemError]exception SystemError`280281Возникает, когда интерпретатор обнаруживает внутреннюю ошибку, но ситуация не настолько серьезна, чтобы заставить его отказаться от всех надежд. Связанное значение представляет собой строку, указывающую на то, что пошло не так (на низкоуровневом языке).282283Сообщите об этом автору или сопровождающему вашего интерпретатора Python. Обязательно укажите версию интерпретатора Python (`sys.version`; она также выводится в начале интерактивного сеанса Python), точное сообщение об ошибке (связанное значение исключения) и, если возможно, исходный код программы, вызвавшей ошибку.284285#### `[exceptions.SystemExit]exception SystemExit`286287Это исключение вызывается функцией [`sys.exit()`](https://python-all.ru/3.0/library/sys.html#sys.exit). Если его не обработать, интерпретатор Python завершает работу; стек вызовов не печатается. Если связанное значение – целое число, оно задает код завершения системы (передаётся в функцию `exit` в C); если это `None`, код завершения равен нулю; если оно другого типа (например, строка), значение объекта выводится, а код завершения равен единице.288289Экземпляры имеют атрибут `code`, который устанавливается в предлагаемый статус выхода или сообщение об ошибке (по умолчанию `None`). Кроме того, это исключение наследуется напрямую от [`BaseException`](https://python-all.ru/3.0/library/exceptions.html#exceptions.BaseException), а не от [`Exception`](https://python-all.ru/3.0/library/exceptions.html#exceptions.Exception), поскольку технически не является ошибкой.290291Вызов [`sys.exit()`](https://python-all.ru/3.0/library/sys.html#sys.exit) преобразуется в исключение, чтобы обработчики очистки (предложения [`finally`](https://python-all.ru/3.0/reference/compound_stmts.html#finally) операторов [`try`](https://python-all.ru/3.0/reference/compound_stmts.html#try)) могли выполниться, и чтобы отладчик мог выполнить сценарий, не рискуя потерять управление. Функцию [`os._exit()`](https://python-all.ru/3.0/library/os.html#os._exit) можно использовать, если абсолютно необходимо выйти немедленно (например, в дочернем процессе после вызова `fork()`).292293Исключение наследуется от [`BaseException`](https://python-all.ru/3.0/library/exceptions.html#exceptions.BaseException), а не от [`Exception`](https://python-all.ru/3.0/library/exceptions.html#exceptions.Exception), чтобы оно случайно не перехватывалось кодом, который ловит [`Exception`](https://python-all.ru/3.0/library/exceptions.html#exceptions.Exception). Это позволяет исключению правильно всплывать и приводить к завершению интерпретатора.294295#### `[exceptions.TypeError]exception TypeError`296297Вызывается, когда операция или функция применяется к объекту неподходящего типа. Связанное значение – строка с подробностями о несоответствии типов.298299#### `[exceptions.UnboundLocalError]exception UnboundLocalError`300301Возбуждается при обращении к локальной переменной в функции или методе, которой не присвоено значение. Является подклассом302303[`NameError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.NameError)304305.306307#### `[exceptions.UnicodeError]exception UnicodeError`308309Возбуждается при возникновении ошибки кодирования или декодирования, связанной с Unicode. Является подклассом310311[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)312313.314315#### `[exceptions.UnicodeEncodeError]exception UnicodeEncodeError`316317Возникает при ошибке, связанной с Unicode, во время кодирования. Является подклассом318319[`UnicodeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.UnicodeError)320321.322323#### `[exceptions.UnicodeDecodeError]exception UnicodeDecodeError`324325Возникает при ошибке, связанной с Unicode, во время декодирования. Является подклассом326327[`UnicodeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.UnicodeError)328329.330331#### `[exceptions.UnicodeTranslateError]exception UnicodeTranslateError`332333Возникает при ошибке, связанной с Unicode, во время трансляции. Является подклассом334335[`UnicodeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.UnicodeError)336337.338339#### `[exceptions.ValueError]exception ValueError`340341Возникает, когда встроенная операция или функция получает аргумент правильного типа, но с неподходящим значением, и эта ситуация не описывается более точным исключением, например342343[`IndexError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.IndexError)344345.346347#### `[exceptions.WindowsError]exception WindowsError`348349Возникает, когда происходит ошибка, специфичная для Windows, или когда номер ошибки не соответствует значению350351`errno`352353. Значения354355`winerror`356357и358359`strerror`360361создаются из возвращаемых значений функций362363`GetLastError`364365и366367`FormatMessage`368369из Windows Platform API. Значение370371`errno`372373отображает значение374375`winerror`376377на соответствующие значения378379`errno.h`380381. Это подкласс382383[`OSError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OSError)384385.386387#### `[exceptions.ZeroDivisionError]exception ZeroDivisionError`388389Вызывается, когда второй аргумент операции деления или взятия остатка равен нулю. Связанное значение – строка, указывающая тип операндов и операцию.390391Следующие исключения используются в качестве категорий предупреждений; подробнее см. в модуле [`warnings`](https://python-all.ru/3.0/library/warnings.html#module-warnings).392393#### `[exceptions.Warning]exception Warning`394395Базовый класс для категорий предупреждений.396397#### `[exceptions.UserWarning]exception UserWarning`398399Базовый класс для предупреждений, генерируемых пользовательским кодом.400401#### `[exceptions.DeprecationWarning]exception DeprecationWarning`402403Базовый класс для предупреждений об устаревших возможностях.404405#### `[exceptions.PendingDeprecationWarning]exception PendingDeprecationWarning`406407Базовый класс для предупреждений о возможностях, которые будут признаны устаревшими в будущем.408409#### `[exceptions.SyntaxWarning]exception SyntaxWarning`410411Базовый класс для предупреждений о сомнительном синтаксисе.412413#### `[exceptions.RuntimeWarning]exception RuntimeWarning`414415Базовый класс для предупреждений о сомнительном поведении во время выполнения.416417#### `[exceptions.FutureWarning]exception FutureWarning`418419Базовый класс для предупреждений о конструкциях, которые в будущем изменят семантику.420421#### `[exceptions.ImportWarning]exception ImportWarning`422423Базовый класс для предупреждений о возможных ошибках при импорте модулей.424425#### `[exceptions.UnicodeWarning]exception UnicodeWarning`426427Базовый класс для предупреждений, связанных с Unicode.428429#### `[exceptions.BytesWarning]exception BytesWarning`430431Базовый класс для предупреждений, связанных с432433[`bytes`](https://python-all.ru/3.0/library/functions.html#bytes)434435и436437`buffer`438439.440441Иерархия классов для встроенных исключений:442443```python444BaseException445 +-- SystemExit446 +-- KeyboardInterrupt447 +-- GeneratorExit448 +-- Exception449 +-- StopIteration450 +-- ArithmeticError451 | +-- FloatingPointError452 | +-- OverflowError453 | +-- ZeroDivisionError454 +-- AssertionError455 +-- AttributeError456 +-- BufferError457 +-- EnvironmentError458 | +-- IOError459 | +-- OSError460 | +-- WindowsError (Windows)461 | +-- VMSError (VMS)462 +-- EOFError463 +-- ImportError464 +-- LookupError465 | +-- IndexError466 | +-- KeyError467 +-- MemoryError468 +-- NameError469 | +-- UnboundLocalError470 +-- ReferenceError471 +-- RuntimeError472 | +-- NotImplementedError473 +-- SyntaxError474 | +-- IndentationError475 | +-- TabError476 +-- SystemError477 +-- TypeError478 +-- ValueError479 | +-- UnicodeError480 | +-- UnicodeDecodeError481 | +-- UnicodeEncodeError482 | +-- UnicodeTranslateError483 +-- Warning484 +-- DeprecationWarning485 +-- PendingDeprecationWarning486 +-- RuntimeWarning487 +-- SyntaxWarning488 +-- UserWarning489 +-- FutureWarning490 +-- ImportWarning491 +-- UnicodeWarning492 +-- BytesWarning493```494