2016-05-31 19 views
5

Sto provando il suggerimento di digitazione introdotto da Python 3.5 e ho riscontrato un problema utilizzando gli stub locali come suggerimento per la digitazione con mypy.Utilizzo di matrici locali Mypy

L'esperimento che faccio è quello di creat kk.py contenente

def type_check(a): 
    pass 

Inoltre, ho messo kk.pyi contenente

def type_check(a: int):... 

nella stessa directory. In questo modo, ho provato ad attivare l'errore "tipi non compatibili nell'assegnazione" passando una stringa a type_check in kk.py. Tuttavia, quando ho eseguito mypy kk.py e non ho ricevuto alcun errore.

Così ho provato un altro modo che suggerisce mypy doc, ovvero impostare la variabile di ambiente MYPYPATH in ~/some/path/stub e inserire kk.pyi nella directory. Ho avuto lo stesso errore, comunque.

Chiunque può aiutarmi in questo?

Ecco la wiki di mypy su how per utilizzare uno stub locale.

risposta

6

Non so perché qualcuno ha votato contro questa domanda senza rispondere o commentare sul perché lui/lei non piaceva, ma qui è la risposta ho capito:

Il file stub di mypy funziona solo durante l'importazione un modulo. Quindi, se avete

def try_check(a): 
    pass 

in kk.py, e

def try_check(a: int):... 

in kk.pyi nella stessa directory con kk.py o nella directory che specifica MYPYPATH, mypy potranno digitare controllo il file python se si importa kk. Si tratta, se si dispone di

import .kk 
kk.try_check('str') 

in test.py ed eseguire mypy test.py, mypy segnalerà il tipo di conflitto. Tuttavia, non segnalerà il conflitto se si dispone di

try_check('str') 

in kk.py.

È possibile digitare le funzioni di controllo nel programma che contiene la definizione della funzione Se si scrive esplicitamente il suggerimento di battitura nella definizione della funzione. Per esempio, è possibile scrivere

def try_check(a: int): 
    pass 

try_check('str') 

in kk.py e poi mypy kk.py. Mypy segnalerà il tipo di conflitto.

+1

Grazie! Ero alle prese con questo problema esatto. Non capisco davvero perché mypy funzioni così. Qualche idea? –

+1

@SolomonBothwell Sento il tentativo iniziale di avere questo programma di controllo statico per il modulo grande come Django, quindi suppone che l'utente verificherà le cose in un pacchetto piuttosto che programmi autoprodotti. – Musen

+0

Puoi assolutamente controllare i tuoi programmi, non c'è bisogno o motivo per usare file stub separati. Se il tuo programma importa una libreria di terze parti che non ha annotazioni, ma vuoi usarle, è quando hai bisogno di stub locali. – OJFord