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>