python / python/mypy

Mypyc crashes on conditionally-defined class

Offen
#15,716 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

crash topic-mypyc
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

To Reproduce

if True:
    class A:
        pass

(This example is silly, but a real use case would be defining a protocol inside a TYPE_CHECKING block.)

Actual Behavior

  File "mypy/mypy/nodes.py", line 1141, in accept
    return visitor.visit_class_def(self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "mypy/mypyc/irbuild/visitor.py", line 167, in visit_class_def
    transform_class_def(self.builder, cdef)
  File "mypy/mypyc/irbuild/classdef.py", line 88, in transform_class_def
    ir = builder.mapper.type_to_ir[cdef.info]
         ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
asdf.py:2: KeyError: <TypeInfo asdf.A>
mypyc --version
mypy 1.6.0+dev.89ad125fa5a31a7c82f267e957d3c94da6b52f61
(compiled: no)

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere das Beispiel für eine bedingt definierte Klasse mit mypyc und lies anschließend mypy/mypyc/irbuild/visitor.py und mypy/mypyc/irbuild/classdef.py im Umfeld von visit_class_def und transform_class_def. Verfolge, warum der bedingt definierte TypeInfo in type_to_ir fehlt; die Aufgabe ist abgeschlossen, wenn das Beispiel nicht mehr den gemeldeten KeyError auslöst und das Verhalten durch Regressionstests abgedeckt ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

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