Hi Greg,
If all you want is to catch an exception group and process it, then except* does look like overkill.
It gets more interesting if you want to handle only some of the exceptions and reraise the rest (without adding the current frame to the traceback), or when the exception handler raises/reraises exceptions (with 'raise e' or bare 'raise').
We can look to Trio to see what exception handling would be like if we add ExceptionGroup without except*.
Trio's exception group is called MultiError, and this part of the tutorial explains how they can be handled:
So asyncio (or some new module in the stdlib) would probably end up exposing something along the lines of MultiError.catch, a context manager where you register the exception handler as a callback and the unhandled exceptions are automatically reraised.
The trick it does to reset __context__ in the finally block won't work for the __traceback__ (I tried). So it always adds the current frame (if it doesn't return before line 145).
So yes, we can catch exception groups and handle them like normal exceptions, but I don't see a clean way to catch parts of them selectively or to raise exceptions from exception handling code.
Irit