Skip to content

PEP 572: Invalid python syntax for walrus operator not raising parser error #9095

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
dhood opened this issue Jul 5, 2020 · 1 comment
Closed
Labels
crash topic-pep-572 PEP 572 (walrus operator)

Comments

@dhood
Copy link
Contributor

dhood commented Jul 5, 2020

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 )

@ilevkivskyi
Copy link
Member

With latest master I am getting

test.py:2: error: Assignment expression within a comprehension cannot be used in a class body  [syntax]
Found 1 error in 1 file (errors prevented further checking)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
crash topic-pep-572 PEP 572 (walrus operator)
Projects
None yet
Development

No branches or pull requests

4 participants