Вбудовані винятки¶
У 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 anexcept
orfinally
clause, or awith
statement, is used.Цей контекст неявної виняткової ситуації можна доповнити явною причиною за допомогою
from
зraise
:raise new_exc from original_exc
The expression following
from
must be an exception orNone
. It will be set as__cause__
on the raised exception. Setting__cause__
also implicitly sets the__suppress_context__
attribute toTrue
, so that usingraise new_exc from None
effectively replaces the old exception with the new one for display purposes (e.g. convertingKeyError
toAttributeError
), 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__
isNone
and__suppress_context__
is false.У будь-якому випадку сам виняток завжди відображається після будь-яких ланцюжкових винятків, так що останній рядок трасування завжди показує останній виняток, який був викликаний.
Успадкування від вбудованих винятків¶
Код користувача може створювати підкласи, які успадковуються від типу винятку. Рекомендується створювати підкласи лише для одного типу винятків за раз, щоб уникнути будь-яких можливих конфліктів між тим, як основи обробляють атрибут args
, а також через можливу несумісність розташування пам’яті.
Деталі реалізації CPython: Більшість вбудованих винятків реалізовано в 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. ATypeError
is raised ifnote
is not a string.Нове в версії 3.11.
- __notes__¶
A list of the notes of this exception, which were added with
add_note()
. This attribute is created whenadd_note()
is called.Нове в версії 3.11.
- exception Exception¶
Усі вбудовані винятки, що не виходять із системи, походять від цього класу. Усі визначені користувачем винятки також мають бути похідними від цього класу.
- exception ArithmeticError¶
Базовий клас для тих вбудованих винятків, які викликаються для різних арифметичних помилок:
OverflowError
,ZeroDivisionError
,FloatingPointError
.
- exception LookupError¶
Базовий клас для винятків, які виникають, коли ключ або індекс, використаний у відображенні чи послідовності, недійсний:
IndexError
,KeyError
. Це можна викликати безпосередньо за допомогоюcodecs.lookup()
.
Конкретні винятки¶
Наступні винятки є винятками, які зазвичай виникають.
- exception AttributeError¶
Викликається, коли посилання на атрибут (див. Посилання на атрибути) або призначення не вдається. (Якщо об’єкт взагалі не підтримує посилання на атрибути чи призначення атрибутів, виникає
TypeError
.)Атрибути
name
іobj
можна встановити за допомогою аргументів конструктора, які містять лише ключові слова. Якщо встановлено, вони представляють ім’я атрибута, до якого намагалися отримати доступ, і об’єкта, до якого було звернено доступ для зазначеного атрибута, відповідно.Змінено в версії 3.10: Додано атрибути
name
іobj
.
- 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 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.
- 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¶
Викликається, коли локальне чи глобальне ім’я не знайдено. Це стосується лише некваліфікованих імен. Пов’язане значення – це повідомлення про помилку, яке містить ім’я, яке не вдалося знайти.
Атрибут
name
можна встановити за допомогою лише ключового аргументу для конструктора. Якщо встановлено, воно представляє назву змінної, до якої намагалися отримати доступ.Змінено в версії 3.10: Додано атрибут
name
.
- exception NotImplementedError¶
Цей виняток походить від
RuntimeError
. У визначених користувачем базових класах абстрактні методи повинні викликати цей виняток, коли вони вимагають, щоб похідні класи замінили метод, або під час розробки класу, щоб вказати, що справжню реалізацію все ще потрібно додати.Примітка
Його не слід використовувати для вказівки на те, що оператор або метод взагалі не призначений для підтримки — у такому випадку або залиште оператор/метод невизначеними, або, якщо це підклас, установіть для нього значення
None
.Примітка
NotImplementedError
andNotImplemented
are not interchangeable, even though they have similar names and purposes. SeeNotImplemented
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: Атрибут
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 RecursionError¶
Цей виняток походить від
RuntimeError
. Він виникає, коли інтерпретатор виявляє, що максимальна глибина рекурсії (див.sys.getrecursionlimit()
) перевищена.Нове в версії 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 toNone
.
Коли функція 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¶
Текст вихідного коду, пов’язаний з помилкою.
- 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¶
Виникає, коли перекладач виявляє внутрішню помилку, але ситуація не виглядає настільки серйозною, щоб змусити його втратити будь-яку надію. Пов’язане значення — це рядок, що вказує на те, що пішло не так (у термінах низького рівня).
Ви повинні повідомити про це автора або супроводжуючого вашого інтерпретатора Python. Обов’язково повідомте версію інтерпретатора Python (
sys.version
; вона також друкується на початку інтерактивного сеансу Python), точне повідомлення про помилку (пов’язане значення винятку) і, якщо можливо, джерело програма, яка викликала помилку.
- exception SystemExit¶
Цей виняток викликає функція
sys.exit()
. Він успадковуєBaseException
замістьException
, щоб його випадково не перехопив код, який перехоплюєException
. Це дозволяє винятку належним чином поширюватися вгору та спричиняти вихід інтерпретатора. Якщо він не оброблений, інтерпретатор Python завершує роботу; трасування стека не друкується. Конструктор приймає той самий необов’язковий аргумент, що передається вsys.exit()
. Якщо значення є цілим числом, воно вказує статус виходу з системи (передається функції Cexit()
); якщо значення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¶
Об’єкт, який кодек намагався закодувати або декодувати.
- 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
andEINPROGRESS
.Окрім атрибутів
OSError
,BlockingIOError
може мати ще один атрибут:
- 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 toerrno
EPIPE
andESHUTDOWN
.
- exception ConnectionAbortedError¶
A subclass of
ConnectionError
, raised when a connection attempt is aborted by the peer. Corresponds toerrno
ECONNABORTED
.
- exception ConnectionRefusedError¶
A subclass of
ConnectionError
, raised when a connection attempt is refused by the peer. Corresponds toerrno
ECONNREFUSED
.
- exception ConnectionResetError¶
A subclass of
ConnectionError
, raised when a connection is reset by the peer. Corresponds toerrno
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 toerrno
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 toerrno
ENOTDIR
.
- exception PermissionError¶
Raised when trying to run an operation without the adequate access rights - for example filesystem permissions. Corresponds to
errno
EACCES
,EPERM
, andENOTCAPABLE
.Змінено в версії 3.11.1: WASI’s
ENOTCAPABLE
is now mapped toPermissionError
.
- 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 EncodingWarning¶
Базовий клас для попереджень щодо кодувань.
Дивіться Увімкніть EncodingWarning для деталей.
Нове в версії 3.10.
- exception ResourceWarning¶
Базовий клас для попереджень щодо використання ресурсів.
Ігнорується стандартними фільтрами попереджень. Увімкнення режиму Python Development Mode показує це попередження.
Нове в версії 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
. Themsg
parameter must be a string. The difference between the two classes is thatBaseExceptionGroup
extendsBaseException
and it can wrap any exception, whileExceptionGroup
extendsException
and it can only wrap subclasses ofException
. This design is so thatexcept Exception
catches anExceptionGroup
but notBaseExceptionGroup
.The
BaseExceptionGroup
constructor returns anExceptionGroup
rather than aBaseExceptionGroup
if all contained exceptions areException
instances, so it can be used to make the selection automatic. TheExceptionGroup
constructor, on the other hand, raises aTypeError
if any contained exception is not anException
subclass.- 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 either a function that accepts an exception and returns true for those that should be in the subgroup, or it can be an exception type or a tuple of exception types, which is used to check for a match using the same check that is used in an
except
clause.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.
- split(condition)¶
Like
subgroup()
, but returns the pair(match, rest)
wherematch
issubgroup(condition)
andrest
is the remaining non-matching part.
- derive(excs)¶
Returns an exception group with the same
message
, but which wraps the exceptions inexcs
.This method is used by
subgroup()
andsplit()
. A subclass needs to override it in order to makesubgroup()
andsplit()
return instances of the subclass rather thanExceptionGroup
.subgroup()
andsplit()
copy the__traceback__
,__cause__
,__context__
and__notes__
fields from the original exception group to the one returned byderive()
, so these fields do not need to be updated byderive()
.>>> 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 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 ofBaseExceptionGroup
which is also a subclass ofException
can only wrap instances ofException
.Нове в версії 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
│ └── 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