Линтер Python в VS-Code: возникает ошибка, когда метод имеет аннотацию типа, но не возвращает оператор

Я пытаюсь включить в своем линтере ошибку стиля (если это наиболее подходящее имя), которая должна возникать, когда функция имеет подсказку типа, но не возвращает оператор возврата. Например:

def do_stuff() -> int:
    a = 2
    # this function expect at the very least something to be returned
    # but no return statement is provided

Я просмотрел документацию pylint, mypy и flake8, но они, похоже, не поддерживают такую ​​​​ошибку. Кроме того, существует ли линтер, способный вызвать ошибку типа, то есть функция должна возвращать int, но на самом деле возвращает str. Например:

def do_stuff() -> int:
    a = 2
    return 'abc'
    # this function expect a int value to be returned
    # but str value is returned instead

Я использую VSCode. Я знаю, что это возможно в PyCharm


person E. Faslo    schedule 09.04.2021    source источник


Ответы (2)


Может быть, линтер может это сделать! Однако в обоих случаях, и особенно для вашего последнего желания (подать жалобу, если вы вернете неправильный тип), я думаю, что вам действительно не нужен линтер, вам нужна настоящая статическая проверка типов.

Наиболее распространенная реализация называется mypy, но Google также предоставляет менее строгую проверку типов под названием ptype, которая может лучше подойти для кодовой базы, которая (пока) не очень дисциплинирована в отношении аннотаций типов.

person sinback    schedule 09.04.2021

Плагин Pylance поддерживает такие статические проверки типов из ящик с помощью Pyright.

Я не уверен, что Pylint уже поддерживает стиль статической типизации Python 3.6. документация здесь предполагает, что он использует/использовал дополнительный модуль расширения, который анализирует строки документации функции для возвращаемого параметра.

person Haini    schedule 09.04.2021
comment
Нужно ли мне также включать его как линтер? - person E. Faslo; 09.04.2021
comment
Я так не думаю. По крайней мере, мои настройки не отражают тот факт, у меня все еще установлен pylint. Вам просто нужно включить его в качестве языкового сервера при появлении запроса: Select Yes when prompted to make Pylance the default language server. - person Haini; 09.04.2021