É possível ignorar uma única linha específica com o pylint?


150

Eu tenho a seguinte linha no meu cabeçalho:

import config.logging_settings

Na verdade, isso altera minhas configurações de log do python, mas o pylint acha que é uma importação não utilizada. Eu não quero remover unused-importavisos em geral, então é possível simplesmente ignorar esta linha específica?

Eu não me importaria de ter um .pylintrcpara este projeto, então as respostas que alteram um arquivo de configuração serão aceitas.

Caso contrário, algo como isso também será apreciado:

import config.logging_settings # pylint: disable-this-line-in-some-way

Respostas:


227

O controle de mensagens Pylint está documentado no manual Pylint :

É possível desativar localmente uma mensagem específica?

Sim, esse recurso foi adicionado no Pylint 0.11. Isso pode ser feito adicionando
# pylint: disable=some-message,another-one
no nível de bloco desejado ou no final da linha de código desejada

Você pode usar o código da mensagem ou os nomes simbólicos.

Por exemplo

def test():
    # Disable all the no-member violations in this function
    # pylint: disable=no-member
    ...
global VAR # pylint: disable=global-statement

O manual também tem mais exemplos .

um wiki que documenta todas as mensagens pilonticas e seus códigos.


Eu gosto de flake8 s # noqa. Eu não quero ver tantos comentários no código. # nolintseria ainda mais claro.
Nils Lindemann

61
import config.logging_settings # pylint: disable=W0611

Isso foi simples e é específico para essa linha.

Como sthenault gentilmente apontou, você pode e deve usar a forma mais legível:

import config.logging_settings # pylint: disable=unused-import

De onde você tira o símbolo explícito da mensagem? Meu linter (o do spyder) não informa e o wiki vinculado na resposta do jomo também não o lista.
Joooeey 15/0518

Você quer dizer unused-import? Acho que meu linter me deu um aviso quando usei o W0611, mas já faz mais de 3 anos, então não me lembro: / Desculpe
The Unfun Cat

4

Eu acredito que o que você está procurando é ...

import config.logging_settings  # @UnusedImport

Observe o espaço duplo antes do comentário para evitar outros avisos de formatação.

Além disso, dependendo do seu IDE (se você estiver usando um), provavelmente existe uma opção para adicionar a regra de ignorar correta (por exemplo, no eclipse pressionando Ctrl1enquanto o cursor está sobre o aviso, o recurso será sugerido automaticamente@UnusedImport


2
Isso pode funcionar para alguns IDEs, mas não funcionou emacs/flycheck. Obrigado. Mantenha a resposta, pois ela pode ajudar outra pessoa.
The Unfun Cat

Isso não funciona ao executar pylintou flake8na linha de comando.
19616 Jacob Tomlinson

@JacobTomlinson Interessante, obrigado. É o que Pydev aceita e fiquei com a impressão de que a ciclovia simplesmente se projetava para pilotar. Deve ser um pouco customizado ou talvez o eclipse esteja processando essas diretivas e suprimindo a saída.
Basic

4

Faça o checkout dos arquivos em https://github.com/PyCQA/pylint/tree/master/pylint/checkers . Não encontrei uma maneira melhor de obter o nome do erro de uma mensagem do que Ctrl + F-ing nesses arquivos ou usando o recurso de pesquisa do Github:

Se a mensagem for "Sem nome ... no módulo ...", use a pesquisa:

No name %r in module %r repo:PyCQA/pylint/tree/master path:/pylint/checkers

Ou, para obter menos resultados:

"No name %r in module %r" repo:PyCQA/pylint/tree/master path:/pylint/checkers

O Github mostra:

"E0611": (
    "No name %r in module %r",
    "no-name-in-module",
    "Used when a name cannot be found in a module.",

Você pode então fazer:

from collections import Sequence # pylint: disable=no-name-in-module

1
você pode encontrá-los todos na documentação
Esteban

Obrigado, é muito melhor do que passar pela fonte. Encontrei mais dois espelhos para o documento pylint. Aparentemente, readthedoc é o espelho oficial. O outro é pylint.org
loxaxs
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.