Skip to content

Crash on starred expression (*expr within a list expression) #1722

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
miedzinski opened this issue Jun 18, 2016 · 9 comments · Fixed by #1953
Closed

Crash on starred expression (*expr within a list expression) #1722

miedzinski opened this issue Jun 18, 2016 · 9 comments · Fixed by #1953
Assignees
Labels
bug mypy got something wrong crash

Comments

@miedzinski
Copy link
Contributor

[1, *[2, 3]]
Traceback (most recent call last):
  File "/home/dominik/.virtualenvs/mypy/bin/mypy", line 6, in <module>
    main(__file__)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/main.py", line 54, in main
    res = type_check_only(sources, bin_dir, options)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/main.py", line 102, in type_check_only
    python_path=options.python_path)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 211, in build
    dispatch(sources, manager)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1336, in dispatch
    process_graph(graph, manager)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1467, in process_graph
    process_stale_scc(graph, scc)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1497, in process_stale_scc
    graph[id].type_check()
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1316, in type_check
    manager.type_checker.visit_file(self.tree, self.xpath)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 426, in visit_file
    self.accept(d)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 476, in accept
    typ = node.accept(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/nodes.py", line 729, in accept
    return visitor.visit_expression_stmt(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 1582, in visit_expression_stmt
    self.accept(s.expr)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 476, in accept
    typ = node.accept(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/nodes.py", line 1434, in accept
    return visitor.visit_list_expr(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 2122, in visit_list_expr
    return self.expr_checker.visit_list_expr(e)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 1251, in visit_list_expr
    e)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 1270, in check_list_or_set_expr
    [nodes.ARG_POS] * len(items), context)[0]
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 242, in check_call
    messages=arg_messages)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 661, in check_argument_types
    actual + 1, i + 1, callee, context, messages)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 686, in check_arg
    elif not is_subtype(caller_type, callee_type):
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/subtypes.py", line 49, in is_subtype
    return left.accept(SubtypeVisitor(right, type_parameter_checker))
AttributeError: 'NoneType' object has no attribute 'accept'
$ python --version
Python 3.5.0+
$ mypy --version
mypy 0.4.2
@miedzinski
Copy link
Contributor Author

miedzinski commented Jun 18, 2016

feaabde (0.4.3-dev) has the same issue, but traceback is different:

Traceback (most recent call last):
  File "/home/dominik/.virtualenvs/mypy/bin/mypy", line 6, in <module>
    main(__file__)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/main.py", line 55, in main
    res = type_check_only(sources, bin_dir, options)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/main.py", line 103, in type_check_only
    python_path=options.python_path)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 215, in build
    dispatch(sources, manager)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1335, in dispatch
    process_graph(graph, manager)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1466, in process_graph
    process_stale_scc(graph, scc)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1496, in process_stale_scc
    graph[id].type_check()
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1315, in type_check
    manager.type_checker.visit_file(self.tree, self.xpath)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 431, in visit_file
    self.accept(d)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 481, in accept
    typ = node.accept(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/nodes.py", line 727, in accept
    return visitor.visit_expression_stmt(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 1605, in visit_expression_stmt
    self.accept(s.expr)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 481, in accept
    typ = node.accept(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/nodes.py", line 1432, in accept
    return visitor.visit_list_expr(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 2150, in visit_list_expr
    return self.expr_checker.visit_list_expr(e)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 1266, in visit_list_expr
    e)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 1274, in check_list_or_set_expr
    tvdef = TypeVarDef('T', -1, [], self.chk.object_type())
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 2256, in object_type
    return self.named_type('builtins.object')
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 2234, in named_type
    sym = self.lookup_qualified(name)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 2324, in lookup_qualified
    n = self.modules[parts[0]]
KeyError: 'builtins'

If it's not supported, mypy should raise an error like it does for print([1, *[2, 3]]) - error: Can use starred expression only as assignment target, although aforementioned build fails with the same traceback on this (0.4.2 does not crash).


EDIT:
git build behaves just like 0.4.2 -- looks like pip install https://github.com/python/mypy/archive/master.zip builds different package than pip install git+git://github.com/python/mypy.git.

@gvanrossum gvanrossum added bug mypy got something wrong crash labels Jun 23, 2016
@gvanrossum gvanrossum added this to the 0.4.x milestone Jun 23, 2016
@gnprice gnprice changed the title Starred expressions Crash on invalid syntax resembling *-args Jul 7, 2016
@JukkaL
Copy link
Collaborator

JukkaL commented Jul 8, 2016

The syntax is actually valid in Python 3.5:

>>> [1, *[2, 3]]
[1, 2, 3]

@JukkaL JukkaL changed the title Crash on invalid syntax resembling *-args Crash on *expr with a list expression Jul 8, 2016
@JukkaL
Copy link
Collaborator

JukkaL commented Jul 8, 2016

Another try with the title :-) Not sure what the correct term for these is.

@JukkaL JukkaL changed the title Crash on *expr with a list expression Crash on *expr within a list expression Jul 8, 2016
@miedzinski
Copy link
Contributor Author

It is called starred expression in PEP 3132.

https://www.python.org/dev/peps/pep-3132/#specification

@JukkaL JukkaL changed the title Crash on *expr within a list expression Crash on starred expression (*expr within a list expression) Jul 8, 2016
@gvanrossum gvanrossum self-assigned this Jul 27, 2016
@gvanrossum
Copy link
Member

I'm going to make this my next Dropbox Hack Week project.

@gvanrossum
Copy link
Member

FWIW I can't repro the crash with the example as given, but this crashes (with a different traceback again):

(1, *(2, 3))

Anyway, the plan is to make it actually work.

@miedzinski
Copy link
Contributor Author

Just installed mypy from PyPI and it produces the same traceback.

(mypy) dominik@ubuntu:/tmp$ python -V
Python 3.5.2
(mypy) dominik@ubuntu:/tmp$ apt-cache policy python3.5
python3.5:
  Installed: 3.5.2-2~16.01
  Candidate: 3.5.2-2~16.01
  Version table:
 *** 3.5.2-2~16.01 500
        500 http://pl.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     3.5.1-10 500
        500 http://pl.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
(mypy) $ mypy -V
mypy 0.4.3
(mypy) dominik@ubuntu:/tmp$ echo '[1, *[2, 3]]' > main.py
(mypy) dominik@ubuntu:/tmp$ mypy main.py
Traceback (most recent call last):
    main(__file__)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/main.py", line 40, in main
    res = type_check_only(sources, bin_dir, options)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/main.py", line 81, in type_check_only
    options=options)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 177, in build
    dispatch(sources, manager)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1323, in dispatch
    process_graph(graph, manager)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1461, in process_graph
    process_stale_scc(graph, scc)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1538, in process_stale_scc
    graph[id].type_check()
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1301, in type_check
    manager.type_checker.visit_file(self.tree, self.xpath)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 152, in visit_file
    self.accept(d)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 201, in accept
    typ = node.accept(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/nodes.py", line 737, in accept
    return visitor.visit_expression_stmt(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 1333, in visit_expression_stmt
    self.accept(s.expr)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 201, in accept
    typ = node.accept(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/nodes.py", line 1445, in accept
    return visitor.visit_list_expr(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 1859, in visit_list_expr
    return self.expr_checker.visit_list_expr(e)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 1283, in visit_list_expr
    e)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 1303, in check_list_or_set_expr
    [nodes.ARG_POS] * len(items), context)[0]
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 253, in check_call
    messages=arg_messages)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 677, in check_argument_types
    actual + 1, i + 1, callee, context, messages)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 702, in check_arg
    elif not is_subtype(caller_type, callee_type):
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/subtypes.py", line 51, in is_subtype
    return left.accept(SubtypeVisitor(right, type_parameter_checker))
AttributeError: 'NoneType' object has no attribute 'accept'

*** INTERNAL ERROR ***

main.py:1: error: Internal error -- please report a bug at https://github.com/python/mypy/issues

NOTE: you can use "mypy --pdb ..." to drop into the debugger when this happens.

(1, *(2, 3)) crashes with different traceback:

(mypy) dominik@ubuntu:/tmp$ echo '(1, *(2, 3))' > main.py
(mypy) dominik@ubuntu:/tmp$ mypy main.py
Traceback (most recent call last):
  File "/home/dominik/.virtualenvs/mypy/bin/mypy", line 6, in <module>
    main(__file__)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/main.py", line 40, in main
    res = type_check_only(sources, bin_dir, options)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/main.py", line 81, in type_check_only
    options=options)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 177, in build
    dispatch(sources, manager)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1323, in dispatch
    process_graph(graph, manager)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1461, in process_graph
    process_stale_scc(graph, scc)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1538, in process_stale_scc
    graph[id].type_check()
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/build.py", line 1301, in type_check
    manager.type_checker.visit_file(self.tree, self.xpath)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 152, in visit_file
    self.accept(d)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 201, in accept
    typ = node.accept(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/nodes.py", line 737, in accept
    return visitor.visit_expression_stmt(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 1333, in visit_expression_stmt
    self.accept(s.expr)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 201, in accept
    typ = node.accept(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/nodes.py", line 1477, in accept
    return visitor.visit_tuple_expr(self)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checker.py", line 1865, in visit_tuple_expr
    return self.expr_checker.visit_tuple_expr(e)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/checkexpr.py", line 1324, in visit_tuple_expr
    fallback_item = join.join_type_list(items)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/join.py", line 358, in join_type_list
    joined = join_types(joined, t)
  File "/home/dominik/.virtualenvs/mypy/lib/python3.5/site-packages/mypy/join.py", line 73, in join_types
    return t.accept(TypeJoinVisitor(s))
AttributeError: 'NoneType' object has no attribute 'accept'

*** INTERNAL ERROR ***

main.py:1: error: Internal error -- please report a bug at https://github.com/python/mypy/issues

NOTE: you can use "mypy --pdb ..." to drop into the debugger when this happens.

@gvanrossum
Copy link
Member

Yeah, I can repro it with 0.4.3 too. It seems something happened since the release of 0.4.3 that made that particular crash disappear.

@gvanrossum
Copy link
Member

Related: #704. PEP 448 defines this new syntax.

gvanrossum added a commit that referenced this issue Jul 29, 2016
This fixes #1722 and addresses most of #704 (but doesn't close it, because of {**x}).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug mypy got something wrong crash
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants