Pylint desativa todos os avisos de um arquivo

86

Estamos usando pylint em nosso sistema de compilação. Temos um pacote python em nossa base de código que tem código descartável e gostaria de desativar todos os avisos para um módulo temporariamente para que eu possa parar de incomodar os outros desenvolvedores com essas mensagens supérfluas. Existe uma maneira fácil de obter pylint: disabletodos os avisos de um módulo?

Mvanveen
fonte

Respostas:

120

Do FAQ do PyLint

Com Pylint <0,25, adicione

# pylint: disable-all

no início do módulo.

Pylint 0.26.1 e superior renomearam essa diretiva para

# pylint: skip-file

(mas a primeira versão será mantida para compatibilidade com versões anteriores).

Para facilitar a localização de quais módulos são ignorados, uma mensagem de nível de informação I0013 é emitida. Com as versões recentes do Pylint, se você usar a sintaxe antiga, uma mensagem I0014 adicional é emitida.

enderskill
fonte
2
Observação: isso desativará todos os avisos e todos os erros . Se você está procurando uma maneira de desabilitar apenas os avisos, veja minha resposta nesta página.
eatcrayons de
31

PyLint tem cinco "categorias" para mensagens (das quais estou ciente).

Essas categorias eram muito óbvias no passado, mas as mensagens Pylint numeradas agora foram substituídas por nomes. Por exemplo, C0302é agora too-many-lines. Mas o 'C' nos diz que too-many-linesé uma mensagem da Convenção . Isso é confuso, porque as mensagens da Convenção frequentemente aparecem apenas como um aviso, uma vez que muitos sistemas (como o Syntastic ) parecem classificar tudo como um aviso ou um erro. No entanto, o relatório PyLint ainda divide as coisas nessas categorias, então ainda é definitivamente compatível.

Sua pergunta se refere especificamente a avisos , e todos os nomes de mensagens de aviso PyLint começam com 'W'.

Foi um pouco difícil para mim rastrear isso, mas essa resposta acabou me levando à resposta. O PyLint ainda suporta a desativação de categorias inteiras de mensagens. Portanto, para desativar todos os avisos , você faria:

disable=W

Isso pode ser usado na linha de comando:

$ pylint --disable=W myfile.py

Ou você pode colocá-lo em seu arquivo pylintrc:

[MESSAGES CONTROL]
disable=W

Nota: você pode já ter a disableopção em seu arquivo rc, caso em que você deve adicionar o 'W' a esta lista.

Ou você pode colocá-lo embutido em seu código, onde funcionará para o escopo em que está colocado:

# pylint: disable=W

Para desabilitá-lo para um arquivo inteiro, é melhor colocá-lo no início do arquivo. No entanto, mesmo no início do arquivo, descobri que ainda estava recebendo a trailing-newlinesmensagem de aviso (tecnicamente, um aviso de convenção , mas estou chegando lá).

No meu caso, eu tinha uma biblioteca escrita por alguém de muito tempo atrás. Funcionou bem, então não havia realmente necessidade de se preocupar com a convenção moderna do Python, etc. Tudo o que realmente me importava eram os erros que provavelmente quebrariam meu código.

Minha solução foi desabilitar todas as mensagens de Aviso , Convenção e Refatoração para este único arquivo colocando o seguinte comando PyLint na primeira linha:

# pylint: disable=W,C,R

Além da mensagem mencionada acima para rastrear novas linhas, isso fez exatamente o que eu precisava.

giz de cera
fonte
15

Sim, você pode especificar # pylint: skip-fileno arquivo, mas é uma má prática desativar todos os avisos de um arquivo.

Se você deseja desabilitar apenas avisos específicos, isso pode ser feito adicionando um comentário # pylint: disable=message-namepara desabilitar a mensagem especificada para o restante do arquivo, ou pelo menos até # pylint: enable=message-name.

Exemplo:

# pylint: disable=no-member
class C123:
    def __init__(self):
        self.foo_x = self.bar_x
# pylint: enable=no-member

class C456:
    def __init__(self):
        self.foo_x = self.bar_x
Acumenus
fonte
Para evitar ser informado de que um aviso específico foi desativado como este, disable=locally-disabledpode ser adicionado ao pylintrc.
ColonelFazackerley
6

Outra opção é usar a --ignoreopção de linha de comando para pular a análise de alguns arquivos.

Sthenault
fonte
0

Meu caso de uso é executar pylint *.py para processar todos os arquivos em um diretório, exceto que desejo pular um arquivo específico.

Adicionar #pylint: skip-filefez com que o pylint falhasse I: 8, 0: Ignoring entire file (file-ignored). Adicionar #pylint: disable=file-ignorednão resolve isso. Presumivelmente, é um erro global em vez de específico do arquivo.

A solução foi incluir --disable=file-ignorednas opções de comando pylint. Demorou muito para descobrir isso; não deve haver um file-ignorederro ao ignorar explicitamente um arquivo.

Curt
fonte
1
Mais idealmente, coloque-o em um pylintrcarquivo de configuração, não em uma opção de comando.
Acumenus