Internal error on mypy of `dataclass` with `TypedDict` as `ClassVar`
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 72/100
Hướng nghiên cứu
Bắt đầu với mypy/plugins/dataclasses.py, đặc biệt là collect_attributes(), và tái hiện sự cố bằng script tối thiểu với --strict và --show-traceback. Theo dõi cách ClassVar chứa một TypedDict được xử lý; hoàn thành nghĩa là mypy không còn gây ra INTERNAL ERROR cho ví dụ này mà thay vào đó hoàn tất việc kiểm tra kiểu một cách bình thường.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Crash Report
When type-checking (--strict or not) a simple script with dataclass, ClassVar and TypedDict (all three components required, omitting any of three resolves the issue), mypy reports "error: INTERNAL ERROR".
Traceback
(.venv) C:\...\mypybug\mypy>mypy --strict --show-traceback test.py
test.py: error: INTERNAL ERROR -- Please try using mypy master on GitHub:
https://mypy.readthedocs.io/en/stable/common_issues.html#using-a-development-mypy-build
Please report a bug at https://github.com/python/mypy/issues
version: 2.4.0+dev.6934a9d01cab6226a64b38642e124368f8ddc653
Traceback (most recent call last):
File "<frozen runpy>", line 203, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "C:\...\mypybug\mypy\.venv\Scripts\mypy.exe\__main__.py", line 5, in <module>
sys.exit(console_entry())
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\__main__.py", line 16, in console_entry
main()
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\main.py", line 154, in main
res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\main.py", line 244, in run_build
res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\build.py", line 422, in build
result = build_inner(
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\build.py", line 537, in build_inner
graph = dispatch(sources, manager, stdout, connect_threads)
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\build.py", line 4150, in dispatch
process_graph(graph, manager)
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\build.py", line 4618, in process_graph
done, still_working, results = manager.wait_for_done(graph)
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\build.py", line 1484, in wait_for_done
process_stale_scc(graph, next_scc, self)
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\build.py", line 4786, in process_stale_scc
mypy.semanal_main.semantic_analysis_for_scc(graph, scc, manager.errors)
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\semanal_main.py", line 97, in semantic_analysis_for_scc
apply_class_plugin_hooks(graph, scc, errors)
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\semanal_main.py", line 466, in apply_class_plugin_hooks
with state.wrap_context():
File "C:\Program Files\Python313\Lib\contextlib.py", line 162, in __exit__
self.gen.throw(value)
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\build.py", line 3075, in wrap_context
yield
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\semanal_main.py", line 469, in apply_class_plugin_hooks
if not apply_hooks_to_class(
~~~~~~~~~~~~~~~~~~~~^
state.manager.semantic_analyzer,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<4 lines>...
errors,
^^^^^^^
):
^
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\semanal_main.py", line 505, in apply_hooks_to_class
ok = ok and hook(ClassDefContext(defn, decorator, self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\plugins\dataclasses.py", line 974, in dataclass_class_maker_callback
return transformer.transform()
~~~~~~~~~~~~~~~~~~~~~^^
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\plugins\dataclasses.py", line 238, in transform
attributes = self.collect_attributes()
File "C:\...\mypybug\mypy\.venv\Lib\site-packages\mypy\plugins\dataclasses.py", line 603, in collect_attributes
assert isinstance(node, Var), node
~~~~~~~~~~^^^^^^^^^^^
AssertionError: TypeInfo(
Name(test.X.TD)
Bases(typing._TypedDict)
Mro(test.X.TD, typing._TypedDict, typing.Mapping, typing.Collection, typing.Iterable, typing.Container, builtins.object)
Names())
test.py: note: use --pdb to drop into pdb
To Reproduce
This code triggers the issue:
import dataclasses
from typing import ClassVar, TypedDict
@dataclasses.dataclass
class X:
a: int
TD: ClassVar = TypedDict('TD', {'a': int})
Your Environment
- Mypy version used: mypy 2.4.0+dev.6934a9d01cab6226a64b38642e124368f8ddc653 (compiled: no)
- Mypy command-line flags: --strict
- Mypy configuration options from
mypy.ini(and other config files): none - Python version used: 3.13.15
- Operating system and version: Windows
- Ngôn ngữ chính
- Python
- Star
- 20.6k
- Fork
- 3.3k
- Merge trung bình
- 1 ngày 18 giờ
- Pull request đã merge (30 ngày)
- 54
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của python/mypy
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
bug topic-configuration topic-error-reporting
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
qgis/QGIS-Documentation#11275 ·
-
bug priority:normal ready-for-dev
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
OpenHands/extensions#626 · 1 bình luận ·
-
Change observation tooltip text Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
CSCfi/sd-search-api#39 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
-
please add to porn list Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
StevenBlack/hosts#3255 ·