Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Internal error on mypy of `dataclass` with `TypedDict` as `ClassVar`

Offen
#21,915 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
72/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python
Bereich
devtools

Rechercherichtung

Beginne mit mypy/plugins/dataclasses.py, insbesondere collect_attributes(), und reproduziere den Absturz mit dem minimalen Skript mit --strict und --show-traceback. Verfolge, wie ClassVar, das ein TypedDict enthält, verarbeitet wird; fertig ist die Aufgabe, wenn mypy für dieses Beispiel keinen INTERNAL ERROR mehr auslöst und stattdessen die Typprüfung normal abschließt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

crash topic-dataclasses

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
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
Ø Merge
1 T. 3 Std.
Gemergte PRs (30 T.)
59

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus python/mypy

Alle Issues in python/mypy

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.