Ошибка импорта в VScode для Pylint при импорте Pygame - PullRequest
0 голосов
/ 26 октября 2018

При импорте Pygame Pylint сходит с ума:

E1101:Module 'pygame' has no 'init' member
E1101:Module 'pygame' has no 'QUIT' member

Я искал в сети, и я нашел это:

"python.linting.pylintArgs": ["--ignored-modules=pygame"]

Это решает проблему с Pygame, но теперь Pylint сходит с ума по-другому: crazy_pylint.png . Затем я нашел "python.linting.pylintArgs": ["--ignored-files=pygame"], но он полностью отключает pylint для всего каталога, в котором я работаю. Так как мне сказать, что Pylint все хорошо с Pygame?

Ответы [ 3 ]

0 голосов
/ 03 февраля 2019

OP Вы также можете сохранить исправление Pylint Pygame, которое вы нашли в vscode, включив аргументы vscode по умолчанию самостоятельно.Линтер сходит с ума (crazy_pylint.png), потому что вы засоряли аргументы столбца по умолчанию своим собственным python.linting.pylintArgs.Исправление игнорирования модуля pygame работает, и линтер может вернуться в не безумный режим, также включив в свой собственный пользовательский аргумент python.linting.pylintArgs.

из документов:

Эти аргументы передаются всякий раз, когда для python.linting.pylintUseMinimalCheckers установлено значение true (по умолчанию).Если вы указываете значение в pylintArgs или используете файл конфигурации Pylint (см. Следующий раздел), тогда pylintUseMinimalCheckers неявно устанавливается в false.

Значения по умолчанию vscode передаются в соответствии с этим: https://code.visualstudio.com/docs/python/linting are:

    --disable=all,
    --enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode

Итак, вот как передать все эти значения по умолчанию, а также --ignored-modules=pygame в пользовательских настройках внутри vscode:

    "python.linting.pylintArgs": [
        "--disable=all",
        "--enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode",
        "--ignored-modules=pygame"
    ]

За @ C._ комментарийвыше он определенно говорит правду;линтер поможет!

Я пишу лучший код с включенным наверняка.

Кроме того, я обнаружил, что вы можете дополнительно настроить свой цилиндр с помощью строки включения и разделенных запятыми «читаемых сообщений цилиндра», перечисленных здесь: https://github.com/janjur/readable-pylint-messages/blob/master/README.md

Так, чтобы не игнорировать также завершающийновые строки, вы бы добавили аргумент списка enable=, включив просто trailing-newlines.

Я действительно надеюсь, что это поможет вам, ОП :) Это помогло мне!

Спасибо, что задали вопрос и поделились --ignored-modules.

0 голосов
/ 29 июня 2019

Для конкретного двоичного модуля вы можете внести его в белый список для Pylint.Для модуля pygame это будет выглядеть следующим образом:

{
    "python.linting.pylintArgs": [
        "--extension-pkg-whitelist=pygame"
    ]
}
0 голосов
/ 27 октября 2018

Для E1101: Проблема в том, что большая часть Pygame реализована на C напрямую. Теперь, это все хорошо, но с точки зрения производительности, однако, Pylint (линтер, используемый VSCode) не может сканировать эти C-файлы. К сожалению, эти же файлы определяют кучу полезных вещей, а именно QUIT и другие константы, такие как MOUSEBUTTONDOWN, K_SPACE и т. Д., А также такие функции, как init или quit.

Прежде всего, чтобы это исправить, перестаньте игнорировать модуль pygame, удалив все ваши аргументы в "python.linting.pylintArgs". Поверь мне, линтер может пригодиться.

Теперь, чтобы исправить проблемы. Для ваших констант (что-нибудь в заглавных буквах), импортируйте их вручную так:

from pygame.constants import (
    MOUSEBUTTONDOWN, QUIT, MOUSEMOTION, KEYDOWN
)

Теперь вы можете использовать их, не добавляя их к pygame.:

for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
    if event.type == KEYDOWN: 
        # Code

Далее, для ошибок init и других функций вы можете вручную помочь линтеру в их устранении двумя способами:

  • Либо добавьте это где-нибудь в свой код: # pylint: disable=no-member. Это отключит проверку элемента для всего файла, предотвращая отображение таких ошибок.
  • Или вы можете заключить строку с ошибкой:

    # pylint: disable=no-member
    pygame.quit()
    # pylint: enable=no-member

Это похоже на то, что делает первый метод, однако оно ограничивает эффект только этой строкой.

Наконец, для всех остальных предупреждений, решение состоит в том, чтобы исправить их. Pylint здесь, чтобы показать вам места, в которых ваш код либо бессмыслен, либо не соответствует спецификациям Python. Быстрый взгляд на ваш скриншот показывает, например, что у вашего модуля нет строки документации, что вы объявили неиспользуемые переменные ... Pylint здесь, чтобы помочь вам в написании краткого, ясного и красивого кода. Вы можете игнорировать эти предупреждения или скрыть их (с помощью # pylint: disable= и этих кодов ) или потратить немного времени на очистку всего.

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

...