Closed
Description
The following invalid syntax including the walrus / assignment expression / named expression operator (taken from https://www.python.org/dev/peps/pep-0572/#scope-of-the-target) does not raise a syntax error.
class Example:
[(j := i) for i in range(5)] # INVALID SYNTAX
Expected behaviour: error: invalid syntax
(as is generated by e.g. j :=1
without parentheses around it).
Actual behaviour:
(env) PS C:\Users\deanna\src\mypy> python -m mypy .\walrus_fail_demo.py --no-incremental --show-traceback
.\walrus_fail_demo.py:48: 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.8219564d365ba29dda8c4383594d9db91f26feec
Traceback (most recent call last):
File "C:\Python38\lib\runpy.py", line 193, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Python38\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "C:\Users\deanna\src\mypy\mypy\__main__.py", line 12, in <module>
main(None, sys.stdout, sys.stderr)
File "C:\Users\deanna\src\mypy\mypy\main.py", line 89, in main
res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
File "C:\Users\deanna\src\mypy\mypy\build.py", line 180, in build
result = _build(
File "C:\Users\deanna\src\mypy\mypy\build.py", line 252, in _build
graph = dispatch(sources, manager, stdout)
File "C:\Users\deanna\src\mypy\mypy\build.py", line 2626, in dispatch
process_graph(graph, manager)
File "C:\Users\deanna\src\mypy\mypy\build.py", line 2949, in process_graph
process_stale_scc(graph, scc, manager)
File "C:\Users\deanna\src\mypy\mypy\build.py", line 3041, in process_stale_scc
mypy.semanal_main.semantic_analysis_for_scc(graph, scc, manager.errors)
File "C:\Users\deanna\src\mypy\mypy\semanal_main.py", line 78, in semantic_analysis_for_scc
process_top_levels(graph, scc, patches)
File "C:\Users\deanna\src\mypy\mypy\semanal_main.py", line 199, in process_top_levels
deferred, incomplete, progress = semantic_analyze_target(next_id, state,
File "C:\Users\deanna\src\mypy\mypy\semanal_main.py", line 326, in semantic_analyze_target
analyzer.refresh_partial(refresh_node,
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 357, in refresh_partial
self.refresh_top_level(node)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 368, in refresh_top_level
self.accept(d)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 4691, in accept
node.accept(self)
File "C:\Users\deanna\src\mypy\mypy\nodes.py", line 940, in accept
return visitor.visit_class_def(self)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 1011, in visit_class_def
self.analyze_class(defn)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 1088, in analyze_class
self.analyze_class_body_common(defn)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 1096, in analyze_class_body_common
defn.defs.accept(self)
File "C:\Users\deanna\src\mypy\mypy\nodes.py", line 1005, in accept
return visitor.visit_block(self)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 3170, in visit_block
self.accept(s)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 4691, in accept
node.accept(self)
File "C:\Users\deanna\src\mypy\mypy\nodes.py", line 1020, in accept
return visitor.visit_expression_stmt(self)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 3179, in visit_expression_stmt
s.expr.accept(self)
File "C:\Users\deanna\src\mypy\mypy\nodes.py", line 1946, in accept
return visitor.visit_list_comprehension(self)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 3755, in visit_list_comprehension
expr.generator.accept(self)
File "C:\Users\deanna\src\mypy\mypy\nodes.py", line 1933, in accept
return visitor.visit_generator_expr(self)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 3771, in visit_generator_expr
expr.left_expr.accept(self)
File "C:\Users\deanna\src\mypy\mypy\nodes.py", line 1619, in accept
return visitor.visit_assignment_expr(self)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 1896, in visit_assignment_expr
self.analyze_lvalue(s.target, escape_comprehensions=True)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 2565, in analyze_lvalue
self.analyze_name_lvalue(lval, explicit_type, is_final, escape_comprehensions)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 2616, in analyze_name_lvalue
added = self.add_symbol(name, var, lvalue, escape_comprehensions=escape_comprehensions)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 4217, in add_symbol
return self.add_symbol_table_node(name, symbol, context, can_defer, escape_comprehensions)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 4265, in add_symbol_table_node
names = self.current_symbol_table(escape_comprehensions=escape_comprehensions)
File "C:\Users\deanna\src\mypy\mypy\semanal.py", line 4553, in current_symbol_table
assert names is not None
AssertionError:
.\walrus_fail_demo.py:48: : note: use --pdb to drop into pdb
( This assertion error has been proposed to something more specific in #9062 )