python / typeshed

Collection of library stubs for Python, with static types
Other
4.39k stars 1.77k forks source link

BaseExceptionGroup should return ExceptionGroup if initialized with non-base exceptions #12972

Open jakkdl opened 3 weeks ago

jakkdl commented 3 weeks ago

When initializing a BaseExceptionGroup with non-base exceptions the stdlib (and the backport) will in fact return an ExceptionGroup. The typing in neither of typeshed nor the backport currently supports this.

from typing_extensions import reveal_type

x = BaseExceptionGroup('', [ValueError()])
reveal_type(x)
$ python foo.py
Runtime type is 'ExceptionGroup'
$ mypy foo.py 
foo.py:30: note: Revealed type is "builtins.BaseExceptionGroup[builtins.ValueError]"
$ pyright foo.py 
foo.py
  foo.py:30:13 - information: Type of "x" is "BaseExceptionGroup[ValueError]"

I have vague recollections that trying to do this was hard-to-impossible, but I currently cannot find any related issues.

brianschubert commented 2 weeks ago

Somewhat related: #9922

At a glance it seems like an overloaded __new__ might work, similar to what's done with some of the other BaseExceptionGroup methods. Though given how special __new__ is, I suspect there may be some unique complications

(cc @sobolevn as the author of the current BaseExceptionGroup overloads)