2016-05-31 20 views
5

Ich versuche den Tipp von Python 3.5 eingegeben und ein Problem mit lokalen Stubs als Eingabe Tipp mit Mypy.Verwenden von lokalen Mypy-Stubs

Das Experiment, das ich tun, ist kk.py creat

def type_check(a): 
    pass 

Auch enthält, ich kk.pyi

def type_check(a: int):... 

im selben Verzeichnis enthält setzen. Auf diese Weise habe ich versucht, den Fehler "ncompatible types in assignment" auszulösen, indem ich eine Zeichenfolge an type_check in kk.py übergebe. Jedoch, wenn ich lief Mypy kk.py und bekomme keinen Fehler.

Also versuchte ich einen anderen Weg, den mypy doc vorschlägt, nämlich die Umgebungsvariable MYPYPATH auf ~/some/path/stub zu setzen und kk.pyi in das Verzeichnis zu legen. Ich habe jedoch den gleichen Fehler.

Jeder kann mir dabei helfen?

Hier ist das Mypy Wiki auf how, um einen lokalen Stub zu verwenden.

Antwort

6

Ich weiß nicht, warum jemand diese Frage überstimmt haben, ohne sie zu beantworten oder zu kommentieren, warum er/sie mochte es, aber hier ist die Antwort, die ich herausgefunden:

Die Stub-Datei von mypy funktioniert nur beim Import ein Modul. Wenn Sie also haben

def try_check(a): 
    pass 

in kk.py und

def try_check(a: int):... 

in kk.pyi im selben Verzeichnis mit kk.py oder in dem Verzeichnis, das die MYPYPATH gibt an, wird mypy Prüfung eingegebenen die Python-Datei, wenn Sie kk importieren. Es ist, wenn Sie

import .kk 
kk.try_check('str') 

in test.py haben und laufen mypy test.py wird mypy den Typ Konflikt berichten. Es wird jedoch nicht der Konflikt gemeldet, wenn Sie haben

in kk.py.

Sie können Prüffunktionen im Programm eingeben, das die Funktionsdefinition enthält. Wenn Sie den Tipp für die Eingabe explizit in die Definition der Funktion schreiben. Zum Beispiel können Sie

def try_check(a: int): 
    pass 

try_check('str') 

in kk.py schreiben und mypy dann kk.py. Mypy meldet den Typkonflikt.

+1

Danke! Ich habe mit genau diesem Problem gekämpft. Ich verstehe wirklich nicht warum Mypy so funktioniert. Irgendwelche Ideen? –

+1

@SolomonBothwell Ich fühle den ersten Versuch, dieses statische Prüfprogramm für große Modulo wie Django zu haben, also nimmt es an, dass der Benutzer Dinge in einem Paket statt selbst geschriebene Programme überprüft. – Musen

+0

Sie können Ihre eigenen Programme absolut überprüfen, es gibt keinen Grund oder Grund, separate Stub-Dateien zu verwenden. Wenn Ihr Programm eine Bibliothek eines Drittanbieters importiert, die keine Anmerkungen enthält, Sie diese jedoch verwenden möchten, benötigen Sie lokale Stubs. – OJFord