Skip to content

Fail fast if special module like typing not from typeshed #1876

@drakedevel

Description

@drakedevel

mypy generally crashes with an internal error if it winds up trying to handle a file named typing.py, apparently due to confusion with the built-in typing module. Here's the simplest test case I've found (tested on 0.4.3 and master):

(mypyve) vm:/tmp/test1$ cat typing.py 
from collections import namedtuple

x = namedtuple('x', [])
(mypyve) vm:/tmp/test1$ mypy -s typing.py 
Traceback (most recent call last):
  File "/tmp/mypyve/bin/mypy", line 6, in <module>
    main(__file__)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/main.py", line 40, in main
    res = type_check_only(sources, bin_dir, options)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/main.py", line 81, in type_check_only
    options=options)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/build.py", line 177, in build
    dispatch(sources, manager)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/build.py", line 1338, in dispatch
    process_graph(graph, manager)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/build.py", line 1481, in process_graph
    process_stale_scc(graph, scc)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/build.py", line 1554, in process_stale_scc
    graph[id].semantic_analysis()
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/build.py", line 1303, in semantic_analysis
    self.manager.semantic_analyzer.visit_file(self.tree, self.xpath)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/semanal.py", line 243, in visit_file
    self.accept(d)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/semanal.py", line 2307, in accept
    node.accept(self)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/nodes.py", line 761, in accept
    return visitor.visit_assignment_stmt(self)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/semanal.py", line 1076, in visit_assignment_stmt
    self.process_namedtuple_definition(s)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/semanal.py", line 1416, in process_namedtuple_definition
    named_tuple = self.check_namedtuple(s.rvalue, name)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/semanal.py", line 1454, in check_namedtuple
    info = self.build_namedtuple_typeinfo(name, items, types)
  File "/tmp/mypyve/lib/python3.4/site-packages/mypy/semanal.py", line 1543, in build_namedtuple_typeinfo
    info.mro = [info] + info.tuple_type.fallback.type.mro
TypeError: can only concatenate list (not "NoneType") to list

*** INTERNAL ERROR ***

typing.py:3: 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.

This is the same error message reported in a comment in #1293. The root cause is that mypy ships a file called typing.py in site-packages, so if site-packages winds up on the path (even implicitly, even with -s), it dies:

(mypyve) vm:/tmp/mypyve/lib/python3.4/site-packages$ mypy -s typing.py 
Traceback (most recent call last):
...
(mypyve) vm:/tmp/mypyve/lib/python3.4/site-packages$ touch hello.py
(mypyve) vm:/tmp/mypyve/lib/python3.4/site-packages$ mypy -s hello.py 
Traceback (most recent call last):
...

This makes it impossible to analyze a package along with even a subset of its dependencies as the implicit addition to MYPYPATH results in an internal error.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions