Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

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

Fechada
#21,915 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@ilevkivskyi já está trabalhando nisso.

Desde 3/10/2026.

  • #21916 de @daleselaji-dev — fechado sem integrar
  • #22094 de @ilevkivskyi — aberto

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
72/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
python
Domínio
devtools

Direção de pesquisa

Comece com mypy/plugins/dataclasses.py, especialmente collect_attributes(), e reproduza o crash com o script mínimo usando --strict e --show-traceback. Rastreie como o ClassVar que contém um TypedDict é tratado; considera-se concluído quando mypy não gerar mais um INTERNAL ERROR para este exemplo e, em vez disso, concluir a verificação de tipos normalmente.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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
Linguagem predominante
Python
Estrelas
20.7k
Forks
3.3k
Merge médio
2d 3h
PRs com merge (30d)
104

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de python/mypy

Todas as issues de python/mypy

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.