summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2022-10-21 10:35:20 (GMT)
committerGitHub <noreply@github.com>2022-10-21 10:35:20 (GMT)
commit8367ca136ed7616cb1f71bd9f1ec98dbcfd35d98 (patch)
treee688b9ce87d15a54c7caaf5bbde14d2a2ce37887
parent49f61068f49747164988ffc5a442d2a63874fc17 (diff)
downloadcpython-8367ca136ed7616cb1f71bd9f1ec98dbcfd35d98.zip
cpython-8367ca136ed7616cb1f71bd9f1ec98dbcfd35d98.tar.gz
cpython-8367ca136ed7616cb1f71bd9f1ec98dbcfd35d98.tar.bz2
gh-98172: [doc] mention that except* handles naked exceptions (GH-98496)
-rw-r--r--Doc/reference/compound_stmts.rst14
1 files changed, 13 insertions, 1 deletions
diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst
index 89634818..c3c7811 100644
--- a/Doc/reference/compound_stmts.rst
+++ b/Doc/reference/compound_stmts.rst
@@ -343,7 +343,7 @@ the case of :keyword:`except`, but in the case of exception groups we can have
partial matches when the type matches some of the exceptions in the group.
This means that multiple :keyword:`!except*` clauses can execute,
each handling part of the exception group.
-Each clause executes once and handles an exception group
+Each clause executes at most once and handles an exception group
of all matching exceptions. Each exception in the group is handled by at most
one :keyword:`!except*` clause, the first that matches it. ::
@@ -364,10 +364,22 @@ one :keyword:`!except*` clause, the first that matches it. ::
| ValueError: 1
+------------------------------------
+
Any remaining exceptions that were not handled by any :keyword:`!except*`
clause are re-raised at the end, combined into an exception group along with
all exceptions that were raised from within :keyword:`!except*` clauses.
+If the raised exception is not an exception group and its type matches
+one of the :keyword:`!except*` clauses, it is caught and wrapped by an
+exception group with an empty message string. ::
+
+ >>> try:
+ ... raise BlockingIOError
+ ... except* BlockingIOError as e:
+ ... print(repr(e))
+ ...
+ ExceptionGroup('', (BlockingIOError()))
+
An :keyword:`!except*` clause must have a matching type,
and this type cannot be a subclass of :exc:`BaseExceptionGroup`.
It is not possible to mix :keyword:`except` and :keyword:`!except*`