New GitHub issue #125825 from Zac-HD:<br>
<hr>
<pre>
As we scale up our use of `except*` and `ExceptionGroups`, we've noticed that `isinstance()` checks get noticeably more clumsy:
```python
# often the isinstance is implicit due to an except-statement
not_found = isinstance(err, HTTPError) and err.status_code == 404
# becomes
if isinstance(err, BaseExceptionGroup):
# often we'd want .split() to do something with the other case, but for simplicity:
not_found = err.subgroup(lambda e: isinstance(e, HTTPError) and e.status_code == 404) is not None
else:
# as above
```
Obviously we use `except T as err:` or `except* T ...` wherever possible, but there are cases where we need to inspect metadata beyond the error type and duplicating the logic often gets messy.
By adding `.subgroup()` and `.split()` methods to `BaseException`, which act as if the exception was wrapped in a single-member group, we can avoid duplication and write only the necessarily-more-complicated code for groups to cover both cases.
(opening issue as discussed with @gpshead and @njsmith elsewhere)
</pre>
<hr>
<a href="https://github.com/python/cpython/issues/125825">View on GitHub</a>
<p>Labels: </p>
<p>Assignee: </p>