2016-05-31 3 views
5

Я пытаюсь ввести подсказку, введенную Python 3.5, и возникла проблема с использованием локальных заглушек в качестве подсказки ввода с помощью mypy.Использование локальных заглушек Mypy

Эксперимент я делаю, содержащий kk.py создающих

def type_check(a): 
    pass 

Кроме того, я поставил kk.pyi содержащий

def type_check(a: int):... 

в том же каталоге. Таким образом, я попытался вызвать ошибку «ncompatible types in assign», передав строку type_check в kk.py. Однако, когда я запустил mypy kk.py и не получил ошибок.

Таким образом, я попробовал другой способ, предложенный mypy doc, который должен установить переменную среды MYPYPATH в ~/some/path/stub и поместить kk.pyi в каталог. Однако у меня такая же ошибка.

Любой может мне помочь?

Это mypy wiki: how, чтобы использовать локальный штемпель.

ответ

6

Я не знаю, почему кто-то проголосовал вниз этот вопрос без ответа на него или комментируя о том, почему он/она не любила его, но вот ответ я понял:

Заглушка файл mypy работает только при импорте модуль. Таким образом, если у вас есть

def try_check(a): 
    pass 

в kk.py и

def try_check(a: int):... 

в kk.pyi в том же каталоге с kk.py или в каталоге, что MYPYPATH указывает, mypy наберет чек файл python, если вы импортируете kk. Это, если у вас есть

import .kk 
kk.try_check('str') 

в test.py и запустить mypy test.py, mypy сообщит тип конфликта. Тем не менее, он не будет сообщать о конфликте, если у вас есть

try_check('str') 

в kk.py.

Вы можете ввести функции проверки в программе, которая содержит определение функции. Если вы пишете подсказку ввода явно в определении функции. Например, вы можете написать

def try_check(a: int): 
    pass 

try_check('str') 

в kk.py, а затем mypy kk.py. Mypy сообщит о конфликте типа.

+1

Спасибо! Я боролся с этой точной проблемой. Я действительно не понимаю, почему моя работа работает так. Есть идеи? –

+1

@SolomonBothwell Я чувствую первоначальную попытку иметь эту статическую программу проверки для большого по модулю типа Django, поэтому он предполагает, что пользователь будет проверять вещи в пакете, а не на самозаписывающихся программах. – Musen

+0

Вы можете абсолютно точно проверить свои собственные программы, просто нет необходимости или использовать отдельные файлы-заглушки. Если ваша программа импортирует стороннюю библиотеку, у которой нет аннотаций, но вы хотите их использовать, тогда вам понадобятся локальные заглушки. – OJFord

Смежные вопросы