Title: Documentation for except* clause and ExceptionGroup can be improved . · Issue #98172 · python/cpython · GitHub
Open Graph Title: Documentation for except* clause and ExceptionGroup can be improved . · Issue #98172 · python/cpython
X Title: Documentation for except* clause and ExceptionGroup can be improved . · Issue #98172 · python/cpython
Description: except* except * currently reads: The except* clause(s) are used for handling ExceptionGroups. The exception type for matching is interpreted as in the case of except, but in the case of exception groups we can have partial matches when ...
Open Graph Description: except* except * currently reads: The except* clause(s) are used for handling ExceptionGroups. The exception type for matching is interpreted as in the case of except, but in the case of exception ...
X Description: except* except * currently reads: The except* clause(s) are used for handling ExceptionGroups. The exception type for matching is interpreted as in the case of except, but in the case of exception ...
Opengraph URL: https://github.com/python/cpython/issues/98172
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Documentation for except* clause and ExceptionGroup can be improved .","articleBody":"# except*\r\n\r\n[except *](https://docs.python.org/3.11/reference/compound_stmts.html#except-star) currently reads:\r\n\r\n\u003e The except* clause(s) are used for handling [ExceptionGroup](https://docs.python.org/3.11/library/exceptions.html#ExceptionGroup)s. The [except](https://docs.python.org/3.11/reference/compound_stmts.html#except)ion type for matching is interpreted as in the case of 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 except* clauses can execute, each handling part of the exception group. Each clause executes once and handles an exception group of all matching exceptions. Each exception in the group is handled by at most one except* clause, the first that matches it.\r\n\u003e\u003e\u003e\r\n\r\n\u003e try:\r\n\u003e raise ExceptionGroup(\"eg\",\r\n\u003e [ValueError(1), TypeError(2), OSError(3), OSError(4)])\r\n\u003e except* TypeError as e:\r\n\u003e print(f'caught {type(e)} with nested {e.exceptions}')\r\n\u003e except* OSError as e:\r\n\u003e print(f'caught {type(e)} with nested {e.exceptions}')\r\n\r\n\r\n\u003ecaught \u003cclass 'ExceptionGroup'\u003e with nested (TypeError(2),)\r\n\u003ecaught \u003cclass 'ExceptionGroup'\u003e with nested (OSError(3), OSError(4))\r\n\u003e + Exception Group Traceback (most recent call last):\r\n\u003e | File \"\u003cstdin\u003e\", line 2, in \u003cmodule\u003e\r\n\u003e | ExceptionGroup: eg\r\n\u003e +-+---------------- 1 ----------------\r\n\u003e | ValueError: 1\r\n\u003e +------------------------------------\r\n\r\nThe following text appears in the same box as the example code, so you want to remove whatever caused that to occur in the source for the doc.\r\n\u003eAny remaining exceptions that were not handled by any :keyword:`!except*`\r\nclause are re-raised at the end, combined into an exception group along with\r\nall exceptions that were raised from within :keyword:`!except*` clauses.\r\n\u003eAn :keyword:`!except*` clause must have a matching type,\r\nand this type cannot be a subclass of :exc:`BaseExceptionGroup`.\r\nIt is not possible to mix :keyword:`except` and :keyword:`!except*`\r\nin the same :keyword:`try`.\r\n\u003e:keyword:`break`, :keyword:`continue` and :keyword:`return`\r\ncannot appear in an :keyword:`!except*` clause.\r\n\r\nWhat is needed to be explained:\r\n- When the try body raises a single exception, not an ExceptionGroup, it will be handled by at most one handler (the first one that matches).\r\n- The except* clause handles an exception group of all matching exceptions **which were not already matched in an earlier except\\* clause**.\r\n- Note that ExceptionGroup is a subclass of BaseExceptionGroup, and so cannot be the type in an except* clause.\r\n\r\n# [ExceptionGroup](https://docs.python.org/3.11/library/exceptions.html#exception-groups)\r\n\r\nExceptionGroup extends both BaseExceptionGroup and Exception.\r\n\r\nBaseException\r\n- BaseExceptionGroup\r\n- - ExceptionGroup \r\n- ...\r\n- Exception\r\n- - ExceptionGroup\r\n- ...\r\n","author":{"url":"https://github.com/mrolle45","@type":"Person","name":"mrolle45"},"datePublished":"2022-10-11T00:29:08.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":4},"url":"https://github.com/98172/cpython/issues/98172"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:46f5d0b1-4047-c537-b7d3-de21c96fc50e |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | C74E:6114D:B1A046:F30430:6969ECBC |
| html-safe-nonce | a1479560d0d778c58e9152d462ff52da875de2440f0d5384ea620f978517cbce |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDNzRFOjYxMTREOkIxQTA0NjpGMzA0MzA6Njk2OUVDQkMiLCJ2aXNpdG9yX2lkIjoiMTQ5MDY4MTczNzQ0MjM1NjQxMiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 58332b862c71607ac833c28f36f8cff14f1789a20c9efa27eaf084fd3a9051d2 |
| hovercard-subject-tag | issue:1403843475 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/98172/issue_layout |
| twitter:image | https://opengraph.githubassets.com/d405c00ba82706c339044c9533c36d1c76bffbcab28941d1d845806f642e9ce0/python/cpython/issues/98172 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/d405c00ba82706c339044c9533c36d1c76bffbcab28941d1d845806f642e9ce0/python/cpython/issues/98172 |
| og:image:alt | except* except * currently reads: The except* clause(s) are used for handling ExceptionGroups. The exception type for matching is interpreted as in the case of except, but in the case of exception ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | mrolle45 |
| hostname | github.com |
| expected-hostname | github.com |
| None | 7b32f1c7c4549428ee399213e8345494fc55b5637195d3fc5f493657579235e8 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | bdde15ad1b403e23b08bbd89b53fbe6bdf688cad |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width