-
-
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
Crashes related to calling isinstance() on a NamedTuple #3419
Comments
MeGotsThis
added a commit
to MeGotsThis/BotGotsThis
that referenced
this issue
Jun 17, 2017
There is an mypy issue with NamedTuple relates to: python/mypy#3419
I can reproduce the second traceback when annotating with a NamedTuple type before that type's definition: from typing import NamedTuple
def get_state(proc: 'Process') -> int:
return proc.state
class Process(NamedTuple):
state: int This kind of annotation came up for me when writing a decorator to be used on the methods of the new NamedTuple. mypy version: |
MeGotsThis
added a commit
to MeGotsThis/BotGotsThis
that referenced
this issue
Jul 13, 2017
There is an mypy issue with NamedTuple relates to: python/mypy#3419
Note that the first crash could also appear from a call to |
JukkaL
pushed a commit
that referenced
this issue
Sep 27, 2017
Forward references didn't work with anything apart from classes, for example this didn't work: ``` x: A A = NamedTuple('A', [('x', int)]) ``` The same situation was with `TypedDict`, `NewType`, and type aliases. The root problem is that these synthetic types are neither detected in first pass, nor fixed in third pass. In certain cases this can lead to crashes (first six issues below are various crash scenarios). This fixes these crashes by applying some additional patches after third pass. Here is the summary of the PR: * New simple wrapper type `ForwardRef` with only one field `link` is introduced (with updates to type visitors) * When an unknown type is found in second pass, the corresponding `UnboundType` is wrapped in `ForwardRef`, it is given a "second chance" in third pass. * After third pass I record the "suspicious" nodes, where forward references and synthetic types have been encountered and append patches (callbacks) to fix them after third pass. Patches use the new visitor `TypeReplacer` (which is the core of this PR). Fixes #3340 Fixes #3419 Fixes #3674 Fixes #3685 Fixes #3799 Fixes #3836 Fixes #3881 Fixes #867 Fixes #2241 Fixes #2399 Fixes #1701 Fixes #3016 Fixes #3054 Fixes #2762 Fixes #3575 Fixes #3990
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I found two separate tracebacks playing with variations on the code from #3418:
produces
The other stack trace I haven't been able to minimize yet, but the traceback is
The crashing line is
if not isinstance(info.ast, parser.ImportedName):
, whereinfo
is aNameInfo
from the above example. I think it's likely the same underlying bug.The text was updated successfully, but these errors were encountered: