Python 3.11 May 2026
Notice the except* (star-except) syntax. It catches all ValueErrors inside the group without breaking the successful execution of task "B". Ask any developer: "What is the worst part of Python?" Many will answer: Tracebacks that only tell you the line, not the column.
# Python 3.11+ from asyncio import gather, sleep async def risky_task(name, fail): await sleep(0.1) if fail: raise ValueError(f"name failed") return name
Python 3.11 adds tomllib to the standard library for reading TOML files. python 3.11
If you are still on Python 3.8 or 3.9, here is why you should make the jump to 3.11 (or later). The headline feature of Python 3.11 is the result of Microsoft’s "Faster CPython" team, led by Mark Shannon. For years, Python developers accepted the trade-off of slower execution for rapid development speed. Python 3.11 narrowed that gap significantly.
async def main(): tasks = [risky_task("A", True), risky_task("B", False), risky_task("C", True)] try: results = await gather( tasks, return_exceptions=False) except ValueError as eg: for exc in eg.exceptions: print(f"Handling: exc") Handling: A failed Handling: C failed Notice the except* (star-except) syntax
# Python 3.10 Traceback (most recent call last): File "calc.py", line 2, in <module> result = 100 / (50 - 50) ZeroDivisionError: division by zero Traceback (most recent call last): File "calc.py", line 2, in <module> result = 100 / (50 - 50) ~~~~^~~~~~~~~~~~ ZeroDivisionError: division by zero
import tomllib with open("config.toml", "rb") as f: config = tomllib.load(f) print(config["tool"]["poetry"]["name"]) # Python 3
ExceptionGroup and except* .