Есть ли способ настроить Pylint (в сравнении с кодом) для распознавания методов, импортированных через символы подстановки? - PullRequest
0 голосов
/ 02 апреля 2019

Я хотел бы использовать линтер (в частности, pylint) для отладки моего кода, но принимать импорт с подстановочными знаками.

На данный момент он выделяет ошибку в коде, который импортирует пакет gurobipy:

неопределенная переменная "Модель", указатель (неопределенная переменная)

Приведенный фрагмент кода освещает эту проблему:

from gurobipy import *

m = Model("mip1") # Pylint shows error in this line

Я хотел бы знать, если Pylint просто не может обрабатывать импорт подстановочных знаков.

Я проверил параметры pylint в файле .pylintrc, созданные с помощью консольных команд, но безрезультатно.

Да, я знаю, что это плохая практика кодирования, но я не знаю, сколько методов пакета я в конечном итоге использую, и я бы предпочел избегать написания "package.method" все время.

Включение jedi в опциях vs code позволяет intellisense выводить объекты пакета, но выделение ошибок сохраняется.

Если это невозможно, я бы с радостью порекомендовал вместо этого еще один линтер.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Должно быть в состоянии обнаруживать модули через импорт подстановочных знаков, в зависимости от того, как коды структурированы / организованы.

Вот пример структуры кода:

|- main.py
|- mymodules
   |- __init__.py
   |- calculator.py

main.py

from mymodules import *

print(get_sum(1, 2))

mymodules / __ init __. py

from .calculator import *

mymodules / calculator.py

def get_sum(op_1, op_2):
    return op_1 + op_2

Это приводит только к предупреждению wildcard-import :

vscode

Единственные настройки Pylint, которые у меня есть, это отключитьUseMinimalCheckers и предупреждение о пропущенной строке документа:

"python.linting.pylintArgs": [
    "--disable=missing-docstring"
],
"python.linting.pylintUseMinimalCheckers": false,

Я настоятельно рекомендую не привыкать к импорту с подстановочными знаками или находить обходные пути, чтобы скрыть предупреждения линтера.Вас предупреждают по причине.См. Почему «импорт *» плох? .Хорошая практика при запуске вашего приложения - начинать группировать ваши коды в модули с похожей функциональностью, а затем просто импортировать каждый модуль.

0 голосов
/ 08 апреля 2019

Конечно, лучше импортировать только то, что вам действительно нужно, чем импортировать все, а затем иметь много неиспользованных предметов.Но для личных сценариев или проектов и практических целей это не большая проблема.

Итак, если вы просто хотите запретить Pylint отображать это конкретное предупреждение, вы можете просто отключить его, добавив в файл settings.json следующее:

"python.linting.pylintArgs": [
    "--disable=wildcard-import"
]

Возможно, вы захотите принятьвзгляните на этот подробный ответ на вопрос Что именно импортирует "import *"?

...