Skip to content

Bug: INTERNAL ERROR from := assignment expression within list comprehension #8986

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

Closed
Jasha10 opened this issue Jun 11, 2020 · 2 comments · Fixed by #9062
Closed

Bug: INTERNAL ERROR from := assignment expression within list comprehension #8986

Jasha10 opened this issue Jun 11, 2020 · 2 comments · Fixed by #9062

Comments

@Jasha10
Copy link

Jasha10 commented Jun 11, 2020

I've encountered a bug when running mypy on a file with an assignment expression contained within a list comprehension.

# mwe.py
lst = [1, 2, 3, 4]
processed = [e for elt in lst if (e := elt - 1) > 1]
print(processed)

I am running the following:
mypy version: 0.790+dev.068594eb38fc550d834b7e61745177c423f2b224
CPython version: 3.8.3, installed with anaconda

Here is the traceback:

$ mypy --show-traceback mwe.py
mwe.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.068594eb38fc550d834b7e61745177c423f2b224
Traceback (most recent call last):
  File "/home/jbss/anaconda3/envs/tmp/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/__main__.py", line 8, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/main.py", line 89, in main
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/build.py", line 180, in build
    result = _build(
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/build.py", line 252, in _build
    graph = dispatch(sources, manager, stdout)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/build.py", line 2626, in dispatch
    process_graph(graph, manager)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/build.py", line 2949, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/build.py", line 3041, in process_stale_scc
    mypy.semanal_main.semantic_analysis_for_scc(graph, scc, manager.errors)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal_main.py", line 78, in semantic_analysis_for_scc
    process_top_levels(graph, scc, patches)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal_main.py", line 199, in process_top_levels
    deferred, incomplete, progress = semantic_analyze_target(next_id, state,
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal_main.py", line 326, in semantic_analyze_target
    analyzer.refresh_partial(refresh_node,
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 357, in refresh_partial
    self.refresh_top_level(node)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 368, in refresh_top_level
    self.accept(d)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 4691, in accept
    node.accept(self)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/nodes.py", line 1063, in accept
    return visitor.visit_assignment_stmt(self)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 1906, in visit_assignment_stmt
    s.rvalue.accept(self)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/nodes.py", line 1946, in accept
    return visitor.visit_list_comprehension(self)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 3755, in visit_list_comprehension
    expr.generator.accept(self)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/nodes.py", line 1933, in accept
    return visitor.visit_generator_expr(self)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 3770, in visit_generator_expr
    self.analyze_comp_for(expr)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 3790, in analyze_comp_for
    cond.accept(self)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/nodes.py", line 1762, in accept
    return visitor.visit_comparison_expr(self)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 3648, in visit_comparison_expr
    operand.accept(self)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/nodes.py", line 1619, in accept
    return visitor.visit_assignment_expr(self)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 1896, in visit_assignment_expr
    self.analyze_lvalue(s.target, escape_comprehensions=True)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 2565, in analyze_lvalue
    self.analyze_name_lvalue(lval, explicit_type, is_final, escape_comprehensions)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 2616, in analyze_name_lvalue
    added = self.add_symbol(name, var, lvalue, escape_comprehensions=escape_comprehensions)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 4217, in add_symbol
    return self.add_symbol_table_node(name, symbol, context, can_defer, escape_comprehensions)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 4265, in add_symbol_table_node
    names = self.current_symbol_table(escape_comprehensions=escape_comprehensions)
  File "/home/jbss/anaconda3/envs/tmp/lib/python3.8/site-packages/mypy/semanal.py", line 4553, in current_symbol_table
    assert names is not None
AssertionError:
mwe.py:3: : note: use --pdb to drop into pdb
@ilevkivskyi
Copy link
Member

Thanks for reporting! Crashes are bad so setting priority to high.

@dhood
Copy link
Contributor

dhood commented Jun 28, 2020

out of curiosity I've been looking into this and think I have an idea of what's causing it. Planning to open a PR with some regression tests and a fix!

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

Successfully merging a pull request may close this issue.

3 participants