python / python/mypy

mypy crashes on a dataclass

Aperta
#20,476 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

crash topic-dataclasses
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Crash Report

Traceback

Traceback (most recent call last):
  File "/home/dnpetrov/Work/memory_tests/venv/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
             ^^^^^^^^^^^^^^^
  File "/home/dnpetrov/Work/memory_tests/venv/lib/python3.12/site-packages/mypy/__main__.py", line 15, in console_entry
    main()
  File "mypy/main.py", line 103, in main
  File "mypy/main.py", line 187, in run_build
  File "mypy/build.py", line 193, in build
  File "mypy/build.py", line 268, in _build
  File "mypy/build.py", line 2950, in dispatch
  File "mypy/build.py", line 3348, in process_graph
  File "mypy/build.py", line 3443, in process_stale_scc
  File "mypy/semanal_main.py", line 99, in semantic_analysis_for_scc
  File "mypy/semanal_main.py", line 432, in apply_class_plugin_hooks
AssertionError: Internal error: too many class plugin hook passes

To Reproduce

Following code crashes mypy:

from dataclasses import dataclass

def fn(a: int) -> int:
    return a

@dataclass
class Test:
    foo = fn
    foo: int = 42

While the code itself, indeed, looks very strange, mypy should not crash, or at least should provide some meaningful diagnostic instead of "Internal error: too many class plugin hook passes".

Your Environment

$ mypy --version
mypy 1.11.2 (compiled: yes)
$ python --version
Python 3.12.3

Also reproduces on the latest and greatest master branch (30b2a2d99a05c5176eff449b80abb61eae5f2043).

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il crash con l’esempio di dataclass, quindi esamina mypy/semanal_main.py in corrispondenza di apply_class_plugin_hooks e l’elaborazione correlata in mypy/build.py. Traccia il motivo per cui viene raggiunto il limite di passaggi degli hook dei plugin di classe; il lavoro è completato quando questo input non va più in crash e produce invece una diagnosi significativa oppure termina correttamente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.