Closed
Description
Crash Report
I added some platform-specific code to my program in a very specific context, and mypy started crashing with an INTERNAL ERROR
. I managed to get it down to a minimal example below.
Traceback
$ mypy bad.py --show-traceback
bad.py:8: 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
Traceback (most recent call last):
File "/usr/bin/mypy", line 33, in <module>
sys.exit(load_entry_point('mypy==0.790', 'console_scripts', 'mypy')())
File "/usr/lib/python3.8/site-packages/mypy/__main__.py", line 8, in console_entry
main(None, sys.stdout, sys.stderr)
File "/usr/lib/python3.8/site-packages/mypy/main.py", line 90, in main
res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
File "/usr/lib/python3.8/site-packages/mypy/build.py", line 180, in build
result = _build(
File "/usr/lib/python3.8/site-packages/mypy/build.py", line 254, in _build
graph = dispatch(sources, manager, stdout)
File "/usr/lib/python3.8/site-packages/mypy/build.py", line 2630, in dispatch
process_graph(graph, manager)
File "/usr/lib/python3.8/site-packages/mypy/build.py", line 2953, in process_graph
process_stale_scc(graph, scc, manager)
File "/usr/lib/python3.8/site-packages/mypy/build.py", line 3051, in process_stale_scc
graph[id].type_check_first_pass()
File "/usr/lib/python3.8/site-packages/mypy/build.py", line 2111, in type_check_first_pass
self.type_checker().check_first_pass()
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 294, in check_first_pass
self.accept(d)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
stmt.accept(self)
File "/usr/lib/python3.8/site-packages/mypy/nodes.py", line 677, in accept
return visitor.visit_func_def(self)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 726, in visit_func_def
self._visit_func_def(defn)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 730, in _visit_func_def
self.check_func_item(defn, name=defn.name)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 792, in check_func_item
self.check_func_def(defn, typ, name)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 975, in check_func_def
self.accept(item.body)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
stmt.accept(self)
File "/usr/lib/python3.8/site-packages/mypy/nodes.py", line 1005, in accept
return visitor.visit_block(self)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 1973, in visit_block
self.accept(s)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
stmt.accept(self)
File "/usr/lib/python3.8/site-packages/mypy/nodes.py", line 1196, in accept
return visitor.visit_if_stmt(self)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 3256, in visit_if_stmt
self.accept(b)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
stmt.accept(self)
File "/usr/lib/python3.8/site-packages/mypy/nodes.py", line 1005, in accept
return visitor.visit_block(self)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 1973, in visit_block
self.accept(s)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
stmt.accept(self)
File "/usr/lib/python3.8/site-packages/mypy/nodes.py", line 1196, in accept
return visitor.visit_if_stmt(self)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 3256, in visit_if_stmt
self.accept(b)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
stmt.accept(self)
File "/usr/lib/python3.8/site-packages/mypy/nodes.py", line 1005, in accept
return visitor.visit_block(self)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 1973, in visit_block
self.accept(s)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
stmt.accept(self)
File "/usr/lib/python3.8/site-packages/mypy/nodes.py", line 1235, in accept
return visitor.visit_try_stmt(self)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 3350, in visit_try_stmt
self.visit_try_without_finally(s, try_frame=bool(s.finally_body))
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 3403, in visit_try_without_finally
self.check_assignment(var, self.temp_node(t, var))
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 2053, in check_assignment
lvalue_type, index_lvalue, inferred = self.check_lvalue(lvalue)
File "/usr/lib/python3.8/site-packages/mypy/checker.py", line 2800, in check_lvalue
assert isinstance(inferred, Var)
AssertionError:
bad.py:8: : note: use --pdb to drop into pdb
To Reproduce
I managed to simplify my code down to this:
import sys
from typing import TypeVar
T = TypeVar("T", int, float)
def f(t: T) -> None:
if sys.platform.startswith("anything"):
try:
pass
except Exception as ex:
pass
For some reason, it must be in a function that takes TypeVar
/AnyStr
argument, and it must be in an if
statement that performs a sys.platform
check that isn't true on the current platform (I've reproduced this on both Linux and Windows).
Your Environment
- Mypy version used: 0.790 (reproduced against the latest
master
) - Mypy command-line flags: N/A
- Mypy configuration options from
mypy.ini
(and other config files): N/A - Python version used: 3.8.6
- Operating system and version: Arch Linux
As mentioned above, I was also able to reproduce this on Windows (Python 3.8.4, mypy 0.790).