python-trio/exceptiongroup

API for accessing leaf exception attributes

njsmith opened this issue · 0 comments

Sometimes after people catch an exception, they need to access attributes on it (e.g., OSError.errno).

But if you do with catch(OSError, handler): ..., then handler has to be prepared to get an ExceptionGroup, not an OSError. So how can handler access the errno attribute?

I guess the simplest possibility would be a global function accessor like:

def handler(exc):
    for leaf_exc in exceptiongroup.leaf_exceptions(exc):
        print(f"This exception's errno is {leaf_exc.errno}!")

(I don't think it will work to have a method on ExceptionGroup, or making ExceptionGroup iterable, because sometimes when you do with catch(OSError, handler): ... you get a plain OSError, with no ExceptionGroup wrapped around it. This is the same reason split is a function, not a method.)