Threaded or asynchronous tasks can have multiple exceptions result from a single source event, think 2/5 tasks having a problem. Currently there’s a few library specific ways to handle this and the Python team want to standardise.
The exception groups wrap multiple tasks. Each task can throw one exception. The group is capable of catching all of them. Before with asyncio, it would exit on first exception.
You're example is: "catch the first exception of either type (A,B)", exception groups are: "catch all exceptions, of either type (A,B)"