Crash while hashing a callable type

未关闭
#4,601 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
25/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
python
领域
compilers

调研方向

Start with the traceback locations in mypy/build.py, especially finish_passes and _patch_indirect_dependencies, then inspect the hash and is_type_obj implementations in mypy/types.py. Reproduce the crash if possible and determine how a callable type reaches hashing with a missing fallback. Done means the crash is prevented and the regression is covered by a test.

由索引模型根据 Issue 内容生成。

描述

needs discussion refactoring

Some time ago there appeared a crash ending in:

...
File "[somewhere]/mypy/build.py", line 1954, in finish_passes
    self.type_map())
File "[somewhere]/mypy/build.py", line 1964, in _patch_indirect_dependencies
    types = set(type_map.values())
File "[somewhere]/mypy/types.py", line 938, in __hash__
    return hash(tuple(self.items()))
File "[somewhere]/mypy/types.py", line 839, in __hash__
    return hash((self.ret_type, self.is_type_obj(),
File "[somewhere]/mypy/types.py", line 723, in is_type_obj
    return self.fallback.type.is_metaclass()
AttributeError: 'NoneType' object has no attribute 'type'

There is no repro yet. There however may be a point for a wider discussion: currently most types in mypy are hashable (they have both __hash__ and __eq__) while they are also mutable. Recently there was a discussion on Python-Dev list and some people said this is a bad pattern. I think this is OK in our case (we use hashes to cache is_subtype results).

主要语言
Python
星标
20.6k
派生
3.3k
平均合并
1 天 18 小时
30 天内合并 PR
54

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

python/mypy 的其他 Issue

查看 python/mypy 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。