Skip to content
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

INTERNAL ERROR when using := assignment expression #9054

Closed
Apakottur opened this issue Jun 26, 2020 · 6 comments · Fixed by #9479
Closed

INTERNAL ERROR when using := assignment expression #9054

Apakottur opened this issue Jun 26, 2020 · 6 comments · Fixed by #9479
Labels

Comments

@Apakottur
Copy link

Apakottur commented Jun 26, 2020

To reproduce the bug, run mypy with the following command:

mypy --show-traceback test.py

Where the contents of test.py are:

def func() -> None:
    obj = MyClass()
    if result := obj.var_name:
        pass


class MyClass:
    def __init__(self):
        self.var_name = "abc"

Here is the traceback that I get:

test.py:3: error: INTERNAL ERROR -- Please try using mypy master on Github:
https://mypy.rtfd.io/en/latest/common_issues.html#using-a-development-mypy-build
Please report a bug at https://github.com/python/mypy/issues
version: 0.790+dev.6ee562a8f3e69ac134f8c501b79b3712c9e24bbd
Traceback (most recent call last):
  File "***/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "***/python3.8/site-packages/mypy/__main__.py", line 8, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "***/python3.8/site-packages/mypy/main.py", line 89, in main
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "***/python3.8/site-packages/mypy/build.py", line 180, in build
    result = _build(
  File "***/python3.8/site-packages/mypy/build.py", line 252, in _build
    graph = dispatch(sources, manager, stdout)
  File "***/python3.8/site-packages/mypy/build.py", line 2626, in dispatch
    process_graph(graph, manager)
  File "***/python3.8/site-packages/mypy/build.py", line 2949, in process_graph
    process_stale_scc(graph, scc, manager)
  File "***/python3.8/site-packages/mypy/build.py", line 3047, in process_stale_scc
    graph[id].type_check_first_pass()
  File "***/python3.8/site-packages/mypy/build.py", line 2107, in type_check_first_pass
    self.type_checker().check_first_pass()
  File "***/python3.8/site-packages/mypy/checker.py", line 294, in check_first_pass
    self.accept(d)
  File "***/python3.8/site-packages/mypy/checker.py", line 401, in accept
    stmt.accept(self)
  File "***/python3.8/site-packages/mypy/nodes.py", line 677, in accept
    return visitor.visit_func_def(self)
  File "***/python3.8/site-packages/mypy/checker.py", line 726, in visit_func_def
    self._visit_func_def(defn)
  File "***/python3.8/site-packages/mypy/checker.py", line 730, in _visit_func_def
    self.check_func_item(defn, name=defn.name)
  File "***/python3.8/site-packages/mypy/checker.py", line 792, in check_func_item
    self.check_func_def(defn, typ, name)
  File "***/python3.8/site-packages/mypy/checker.py", line 975, in check_func_def
    self.accept(item.body)
  File "***/python3.8/site-packages/mypy/checker.py", line 401, in accept
    stmt.accept(self)
  File "***/python3.8/site-packages/mypy/nodes.py", line 1005, in accept
    return visitor.visit_block(self)
  File "***/python3.8/site-packages/mypy/checker.py", line 1973, in visit_block
    self.accept(s)
  File "***/python3.8/site-packages/mypy/checker.py", line 401, in accept
    stmt.accept(self)
  File "***/python3.8/site-packages/mypy/nodes.py", line 1196, in accept
    return visitor.visit_if_stmt(self)
  File "***/python3.8/site-packages/mypy/checker.py", line 3212, in visit_if_stmt
    if_map, else_map = self.find_isinstance_check(e)
  File "***/python3.8/site-packages/mypy/checker.py", line 3928, in find_isinstance_check
    if_map, else_map = self.find_isinstance_check_helper(node)
  File "***/python3.8/site-packages/mypy/checker.py", line 4104, in find_isinstance_check_helper
    return self.find_isinstance_check_helper(node.target)
  File "***/python3.8/site-packages/mypy/checker.py", line 4108, in find_isinstance_check_helper
    vartype = type_map[node]
KeyError: <mypy.nodes.NameExpr object at 0x7fb2f0768940>
test.py:3: : note: use --pdb to drop into pdb

mypy 0.790+dev.6ee562a8f3e69ac134f8c501b79b3712c9e24bbd
Python 3.8.2

@JukkaL
Copy link
Collaborator

JukkaL commented Jul 3, 2020

This is a pretty bad crash, since the example looks fairly straightforward.

@llchan
Copy link
Contributor

llchan commented Sep 25, 2020

Quick note to self: if you reverse the order of MyClass and func, the problem goes away.

EDIT: deleted another sentence about from __future__ import annotations that was wrong.

@hauntsaninja hauntsaninja added the topic-pep-572 PEP 572 (walrus operator) label Sep 25, 2020
@hauntsaninja
Copy link
Collaborator

This seems to be the same stacktrace as #9034

@hauntsaninja
Copy link
Collaborator

Switching the order fixes that one too.

@hauntsaninja
Copy link
Collaborator

@Apakottur thanks for reporting! And thanks to llchan this should be fixed on master :-) I was wondering if the code you're working on is open source? My interest is in adding projects to https://github.com/hauntsaninja/mypy_primer that use newer Python features.

@Apakottur
Copy link
Author

@hauntsaninja The code w're working on is not yet open source, but we plan on making some of it OS in the future.

In any case it is important to mention that we're only using mypy manually on occasion, as we do not feel that it is ready to be used in CI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants