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

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

The built-in exceptions listed below 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 у розділі Винятки, визначені користувачем.

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

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, а також через можливу несумісність розташування пам’яті.

CPython implementation detail: Більшість вбудованих винятків реалізовано в C для ефективності, див.: Objects/exceptions.c. Деякі мають власне розташування пам’яті, що унеможливлює створення підкласу, який успадковує кілька типів винятків. Розташування пам’яті типу є деталлю реалізації та може змінюватися між версіями Python, що призведе до нових конфліктів у майбутньому. Тому рекомендується взагалі уникати створення підкласів кількох типів винятків.

Базові класи

Наступні винятки використовуються переважно як базові класи для інших винятків.

exception BaseException

Базовий клас для всіх вбудованих винятків. Він не призначений для безпосереднього успадкування класами, визначеними користувачем (для цього використовуйте Exception). Якщо str() викликається для екземпляра цього класу, повертається представлення аргументів для екземпляра або порожній рядок, якщо аргументів не було.

args

Кортеж аргументів, наданий конструктору винятків. Деякі вбудовані винятки (як-от OSError) очікують певної кількості аргументів і призначають особливе значення елементам цього кортежу, тоді як інші зазвичай викликаються лише з одним рядком, що дає повідомлення про помилку.

with_traceback(tb)

This method sets tb as the new traceback for the exception and returns the exception object. It is usually used in exception handling code like this:

try:
    ...
except SomeException:
    tb = sys.exc_info()[2]
    raise OtherException(...).with_traceback(tb)
exception Exception

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

exception ArithmeticError

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

exception BufferError

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

exception LookupError

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

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

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

exception AssertionError

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

exception AttributeError

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

exception EOFError

Викликається, коли функція input() досягає умови кінця файлу (EOF) без читання жодних даних. (Примітка: методи io.IOBase.read() і io.IOBase.readline() повертають порожній рядок, коли вони досягають EOF.)

exception FloatingPointError

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

exception GeneratorExit

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

exception ImportError

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

The name and path attributes can be set using keyword-only arguments to the constructor. When set they represent the name of the module that was attempted to be imported and the path to any file which triggered the exception, respectively.

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

exception ModuleNotFoundError

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

Нове в версії 3.6.

exception IndexError

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

exception KeyError

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

exception KeyboardInterrupt

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

Примітка

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

exception MemoryError

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

exception NameError

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

exception NotImplementedError

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

Примітка

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

Примітка

NotImplementedError and NotImplemented are not interchangeable, even though they have similar names and purposes. See NotImplemented for details on when to use it.

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

Відповідне повідомлення про помилку, яке надає операційна система. Він відформатований функціями C perror() під POSIX і FormatMessage() під Windows.

filename
filename2

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

Змінено в версії 3.3: EnvironmentError, IOError, WindowsError, socket.error, select.error і mmap.error об’єднано у OSError, і конструктор може повернути підклас.

Змінено в версії 3.4: The filename attribute is now the original file name passed to the function, instead of the name encoded to or decoded from the filesystem encoding. Also, the filename2 constructor argument and attribute was added.

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 RecursionError

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

Нове в версії 3.5: Раніше було викликано звичайне повідомлення RuntimeError.

exception ReferenceError

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

exception RuntimeError

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

exception StopIteration

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

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.

Нове в версії 3.5.

exception SyntaxError(message, details)

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

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

filename

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

lineno

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

offset

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

text

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

For errors in f-string fields, the message is prefixed by «f-string: » and the offsets are offsets in a text constructed from the replacement expression. For example, compiling f’Bad {a b} field“ results in this args attribute: („f-string: …“, („“, 1, 4, „(a b)n“)).

exception IndentationError

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

exception TabError

Піднімається, коли відступ містить непослідовне використання табуляції та пробілів. Це підклас IndentationError.

exception SystemError

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

Ви повинні повідомити про це автора або супроводжуючого вашого інтерпретатора Python. Обов’язково повідомте версію інтерпретатора Python (sys.version; вона також друкується на початку інтерактивного сеансу Python), точне повідомлення про помилку (пов’язане значення винятку) і, якщо можливо, джерело програма, яка викликала помилку.

exception SystemExit

Цей виняток викликає функція sys.exit(). Він успадковує BaseException замість Exception, щоб його випадково не перехопив код, який перехоплює Exception. Це дозволяє винятку належним чином поширюватися вгору та спричиняти вихід інтерпретатора. Якщо він не оброблений, інтерпретатор Python завершує роботу; трасування стека не друкується. Конструктор приймає той самий необов’язковий аргумент, що передається в sys.exit(). Якщо значення є цілим числом, воно вказує статус виходу з системи (передається функції C exit()); якщо значення None, статус виходу дорівнює нулю; якщо він має інший тип (наприклад, рядок), значення об’єкта друкується, а статус виходу один.

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

end

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

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

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

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 and EPERM.

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.

Нове в версії 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

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

exception RuntimeWarning

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

exception FutureWarning

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

exception ImportWarning

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

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

exception UnicodeWarning

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

exception BytesWarning

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

exception ResourceWarning

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

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

Нове в версії 3.2.

Ієрархія винятків

Ієрархія класів для вбудованих винятків така:

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- 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
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning