Requirements from AsyncIO
Requirements from Trio
Narrow down to find one that works for both
Extra syntax?
A few API functions to unpack information?
How do you represent tracebacks?
Challenge: it's a complicated problem space, it's important to have clear explanations for users.
Motivation
Explain the problem in general. Use cases:
async/await
Task groups/nurseries is the way to structure code.
multiprocessing
Collect results from many workers.
unittest
actual exception + tearDown() exception
Hypothesis
Approaches
Modify the try-except statement
run except: clauses multiple times to unpack all exceptions
it's subtle: is it backwards-compatible?
new code wrapped around old code or vice versa: what will happen?
Has to be within the current syntax: otherwise none of the existing code will adopt it
CancelledError part of ExceptionGroup: existing asyncio code will break
Make ExceptionGroup a container of Exception
how to tie together:
correctly handling extraction of a particular exception
correctly handling tracebacks
Approach
Requirements from AsyncIO Requirements from Trio Narrow down to find one that works for both Extra syntax? A few API functions to unpack information? How do you represent tracebacks?
Challenge: it's a complicated problem space, it's important to have clear explanations for users.
Motivation
Explain the problem in general. Use cases:
async/await
Task groups/nurseries is the way to structure code.
multiprocessing
Collect results from many workers.
unittest
actual exception + tearDown() exception
Hypothesis
Approaches
Modify the try-except statement
run except: clauses multiple times to unpack all exceptions it's subtle: is it backwards-compatible? new code wrapped around old code or vice versa: what will happen?
Has to be within the current syntax: otherwise none of the existing code will adopt it CancelledError part of ExceptionGroup: existing asyncio code will break
Make ExceptionGroup a container of Exception
how to tie together: correctly handling extraction of a particular exception correctly handling tracebacks