-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RecursionError: maximum recursion depth exceeded #17691
Comments
Refs bc39f17 |
Did you somehow managed to use mypy cache from an old mypy version? I thought mypy is smart enough to not do this, unless you are doing something tricky. |
Hi @ilevkivskyi , thank you for looking at this. Not trying to do anything tricky! I first found the segfault in CI on a clean GitHub Action run. Running it locally again after explicitly removing Happy to help investigate as needed.
|
OK, now this is interesting. I have an idea of what may be going on, but it may take a while to find repro. Mypy should print file name and line number that caused the crash before the start of the traceback. You can try using this to find a minimal repro. |
Thanks, @ilevkivskyi , for the note on the line number. I have been able to create reproduceable snippet, below. This code has been around and passing for some time, at least on MyPy 1.9 and 1.10, and I have confirmed again it passes on 1.10. If I remove the recursive union component, the exception goes away. import typing as tp
TLabel = tp.Union[
tp.Hashable,
int,
bool,
float,
complex,
str,
bytes,
None,
tp.Tuple['TLabel'],
]
TLocSelectorNonContainer = tp.Union[
TLabel,
slice,
tp.List[TLabel],
]
def is_slice(value: TLocSelectorNonContainer) -> bool:
return value.__class__ is slice Note that the following, simpler example, still using the recursive union, passes without exception. import typing as tp
TLabel = tp.Union[
tp.Hashable,
int,
bool,
float,
complex,
str,
bytes,
None,
tp.Tuple['TLabel'],
]
def is_none(value: TLabel) -> bool:
return value is None |
Yeah, we recently switched tuple fallbacks from joins to unions, this obviously causes this issue. Btw while I am working on this, using |
Thank you for pointing that out: Making that change fixes the crash for me: much appreciated! |
In the meantime a bit simpler repro is from typing import Tuple, Union, Hashable, List
TLabel = Union[Hashable, Tuple[TLabel]]
TLabels = Union[TLabel, List[TLabel]]
x: TLabel
xs: TLabels = [x] |
Crash Report
While I was having no problems with MyPy 1.10, with MyPy 1.11.0, 1.11.1 I get segmentation faults, and an exception with the code installed as:
By avoiding the segfaults, I get a
KeyError: 'expr'
Traceback
To Reproduce
This results from running MyPy on a large code base that makes heavy use of
TypeVarTuple
andUnpack
. I cannot isolate the issue but this can be reproduced within the following PR:static-frame/static-frame#966
Your Environment
mypy --strict
mypy.ini
(and other config files): https://github.com/static-frame/static-frame/blob/e235c34c1a25a97a36e24e5c584049bd2df31ebb/pyproject.toml#L26The text was updated successfully, but these errors were encountered: