Open
Description
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.
Activity
brianschubert commentedon Nov 8, 2024
Somewhat related: #9922
At a glance it seems like an overloaded
__new__
might work, similar to what's done with some of the otherBaseExceptionGroup
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)except*
to ExceptionGroup with non-base exceptions microsoft/pyright#9466jakkdl commentedon Jan 28, 2025
Oh, found a comment in the test file noticing it as a limitation
typeshed/stdlib/@tests/test_cases/builtins/check_exception_group-py311.py
Lines 24 to 26 in aa992b9
and found the accompanying discussion #9230 (comment) where @sobolevn lays out the tradeoffs
I tried it out myself, and managed to repro the limitations*. Though I personally feel like getting
BaseExceptionGroup -> ExceptionGroup
is perhaps more important than customBaseExceptionGroup
subclasses; especially as end users can work around typing issues from customBaseExceptionGroup
with explicit type hints and/or adding a__new__
to their subclass.Though I also hit python/mypy#17251 so we'd need to remove the
__init__
, and I'm not sure what the downsides of that would be.* It's only a limitation for mypy, pyright handles this (somewhat minified) repro perfectly. Mypy falls back to defaults and raises some errors on the stub itself.
srittau commentedon Feb 26, 2025
If someone could provide an exploratory PR, we could see the impact of such a change.