Repository navigation
Mypy crashes on @classmethod #4575
Copy link
Copy link
Closed
Labels
Description
Hello,
While running mypy it crashed, I'm attaching all details.
Code that crashes:
from dateutil.parser import parse
from utils.general_utils import verify_meta
from io import StringIO
...
class Details(NamedTuple):
token: Optional[str] = None
version: Optional[str] = None
last1: Optional[datetime.datetime] = None
loc1: Optional[Decimal] = None
loc2: Optional[Decimal] = None
last2: Optional[datetime] = None
@classmethod <-- Crashes here --------------------------
def from_stream(cls, stream: StringIO) -> 'Details':
details_json = json.load(stream)
verify_meta(details_json)
token = details_json.get('token', None)
version = details_json.get('version', None)
last1 = details_json.get('last1', None)
loc1 = details_json.get('loc1', None)
loc2 = details_json.get('loc2', None)
last2 = details_json.get('last2', None)
return DeviceDetailsMessage(token, version, last1,
Decimal(loc1) if loc1 else None,
Decimal(loc2) if loc2 else None,
parse(last2) if last2 else None)
-
What are the versions of mypy and Python you are using?
mypy - 0.56, Python - 3.6 -
What are the mypy flags you are using? (For example --strict-optional)
mypy --show-traceback --ignore-missing-imports --python-version 3.6 . -
If mypy crashed with a traceback, please paste
the full traceback below.
13:01 $ mypy --show-traceback --ignore-missing-imports --python-version 3.6 .
./profiles/file_process.py:29: error: INTERNAL ERROR -- please report a bug at https://github.com/python/mypy/issues version: 0.560
Traceback (most recent call last):
File "/Users/code/source/env_env/bin/mypy", line 11, in <module>
sys.exit(console_entry())
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/__main__.py", line 7, in console_entry
main(None)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/main.py", line 66, in main
res = type_check_only(sources, bin_dir, options)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/main.py", line 119, in type_check_only
options=options)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/build.py", line 218, in build
graph = dispatch(sources, manager)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/build.py", line 1997, in dispatch
process_graph(graph, manager)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/build.py", line 2299, in process_graph
process_stale_scc(graph, scc, manager)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/build.py", line 2467, in process_stale_scc
graph[id].semantic_analysis()
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/build.py", line 1855, in semantic_analysis
self.manager.semantic_analyzer.visit_file(self.tree, self.xpath, self.options, patches)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/semanal.py", line 287, in visit_file
self.accept(d)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/semanal.py", line 3861, in accept
node.accept(self)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/nodes.py", line 696, in accept
return visitor.visit_class_def(self)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/semanal.py", line 666, in visit_class_def
defn.defs.accept(self)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/nodes.py", line 756, in accept
return visitor.visit_block(self)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/semanal.py", line 1610, in visit_block
self.accept(s)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/semanal.py", line 3861, in accept
node.accept(self)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/nodes.py", line 573, in accept
return visitor.visit_decorator(self)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/semanal.py", line 2933, in visit_decorator
dec.func.accept(self)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/nodes.py", line 497, in accept
return visitor.visit_func_def(self)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/semanal.py", line 386, in visit_func_def
self.prepare_method_signature(defn, self.type)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/semanal.py", line 438, in prepare_method_signature
leading_type = self.class_type(info)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/semanal.py", line 1234, in class_type
leading_type = checkmember.type_object_type(info, self.builtin_type)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/checkmember.py", line 543, in type_object_type
return type_object_type_from_function(init_method, info, fallback)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/checkmember.py", line 548, in type_object_type_from_function
signature = bind_self(function_type(init_or_new, fallback))
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/checkmember.py", line 682, in bind_self
arg_types = [expand(x) for x in func.arg_types[1:]]
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/checkmember.py", line 682, in <listcomp>
arg_types = [expand(x) for x in func.arg_types[1:]]
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/checkmember.py", line 680, in expand
return expand_type(target, {func.variables[0].id: typearg})
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/expandtype.py", line 16, in expand_type
return typ.accept(ExpandTypeVisitor(env))
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/types.py", line 1230, in accept
return visitor.visit_union_type(self)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/expandtype.py", line 117, in visit_union_type
return UnionType.make_simplified_union(self.expand_types(t.items), t.line, t.column)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/expandtype.py", line 132, in expand_types
a.append(t.accept(self))
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/types.py", line 1415, in accept
return visitor.visit_forwardref_type(self)
File "/Users/code/source/env_env/lib/python3.6/site-packages/mypy/types.py", line 1500, in visit_forwardref_type
raise RuntimeError('Internal error: unresolved forward reference')
RuntimeError: Internal error: unresolved forward reference
./profiles/file_process.py:29: : note: use --pdb to drop into pdb
Reactions are currently unavailable
Activity
efimerdlerkravitz commentedon Feb 15, 2018
Found out why
last2: Optional[datetime] = Nonedatetime is not the class, but the module, it should have beenlast2: Optional[datetime.datetime] = NoneIn this case I believe you should't crash, but it's less critical.
emmatyping commentedon Feb 15, 2018
Hm, it appears you didn't import datetime either? Or was that omitted accidentally?
ilevkivskyi commentedon Feb 15, 2018
Hm, actually it looks like a fault in separation of concerns between semantic analysis and type checking. The
checkmemberfunctions should not be called insemanal.py.efimerdlerkravitz commentedon Feb 15, 2018
@ethanhs that was omitted accidentally
[-]Mypy crahses on @classmethod[/-][+]Mypy crashes on @classmethod[/+]msullivan commentedon Sep 19, 2018
This appears to be fixed by 0.630.
(The checkmember calls in semanal are still there, but I'm about to put up a PR that removes that.)