MyPy should report error if variable imported in TYPE_CHECKING block?
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Currently, MyPy doesn't report an error when a variable is imported in the if TYPE_CHECKING block and then used elsewhere.
For example, MyPy accepts this code:
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from typing import NamedTuple
class C(NamedTuple):
x: int
y: int
even though, at runtime, it fails:
Traceback (most recent call last):
File "type_checking_test.py", line 6, in <module>
class C(NamedTuple):
NameError: name 'NamedTuple' is not defined
(I'm using MyPy version 0.650.)
Should this be fixed? I think this could be fixed by adding an is_type_checking_only variable to SymbolTableNode, which is True if the variable was imported or assigned within a TYPE_CHECKING block, and ensuring that this flag is false for any variables used in places other than type annotations in the actual code.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo il problema con l’esempio fornito che usa TYPE_CHECKING e NamedTuple, quindi traccia come vengono gestiti gli import e le voci della tabella dei simboli provenienti dai blocchi TYPE_CHECKING. Il lavoro è completato quando MyPy segnala l’uso non valido a runtime continuando al contempo a consentire i nomi usati solo nelle annotazioni di tipo, con una copertura del comportamento dell’esempio.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 38/100