Estou tentando desativar o aviso C0321 ("mais de uma instrução em uma única linha" - geralmente coloco if
instruções com resultados curtos de uma linha na mesma linha), no Pylint 0.21.1 (se isso importa: somando 0,20. 1, comum 0.50.3, Python 2.6.6 (r266: 84292, 15 de setembro de 2010, 16:22:56).
Tentei adicionar disable=C0321
o arquivo de configuração do Pylint, mas o Pylint insiste em denunciá-lo de qualquer maneira. Variações sobre essa linha (como disable=0321
ou disable=C321
) são sinalizadas como erros, então pylint faz reconhecer a opção adequada, é apenas ignorá-lo.
Isso é um bug do Pylint ou estou fazendo algo errado? Existe alguma maneira de contornar isso? Eu realmente gostaria de me livrar desse barulho.
Respostas:
pylint --generate-rcfile
mostra assim:Portanto, parece que você
~/.pylintrc
deve ter asdisable=
linhas dentro de uma seção[MESSAGES CONTROL]
.fonte
~/.pylintrc
com duas linhas[MESSAGES CONTROL]
edisable=C0321
. Isso impede essa mensagem.Eu tive esse problema usando o Eclipse e resolvi-o da seguinte maneira:
na pasta pylint (por exemplo
C:\Python26\Lib\site-packages\pylint
), mantenha pressionada a tecla Shift, clique com o botão direito do mouse e escolha abrir o comando do Windows nessa pasta. Tipo:Isso cria o
standard.rc
arquivo de configuração. Abra-o no bloco de notas e em[MESSAGES CONTROL]
, remova o comentáriodisable=
e adicione os IDs da mensagem que deseja desativar, por exemplo:Salve o arquivo e, em Eclipse-> janela-> preferências-> PyDev-> pylint, na caixa de argumentos, digite:
Agora deve funcionar ...
Você também pode adicionar um comentário na parte superior do seu código que será interpretado pelo pylint:
link para todos os códigos de mensagem pylint
Adicionar, por exemplo,
--disable-ids=C0321
na caixa de argumentos não funciona. Todas as mensagens pylint disponíveis são armazenadas no dicionário_messages
, um atributo de uma instância dapylint.utils.MessagesHandlerMixIn
classe. Ao executar o pylint com o argumento--disable-ids=...
(pelo menos sem um arquivo de configuração), este dicionário está inicialmente vazio, gerando uma exceção KeyError no pylint (pylint.utils.MessagesHandlerMixIn.check_message_id()
. No Eclipse, você pode ver esta mensagem de erro no Pylint Console (windows - show view - Console , selecione console do Pylint nas opções do console, além do ícone do console.)fonte
A partir do Pylint v. 0.25.3, é possível usar os nomes simbólicos para desativar avisos em vez de ter que lembrar todos esses números de código . Por exemplo:
Esse estilo é mais instrutivo que os códigos de erro enigmático e também mais prático, pois as versões mais recentes do Pylint apenas emitem o nome simbólico, não o código de erro.
A correspondência entre nomes e códigos simbólicos pode ser encontrada aqui .
Um comentário de desativação pode ser inserido em sua própria linha, aplicando a desativação a tudo o que vem depois no mesmo bloco. Como alternativa, ele pode ser inserido no final da linha para a qual se destina a ser aplicado.
Se o pylint emitir "
Locally disabling
" mensagens, você pode se livrar delas incluindo a desativaçãolocally-disabled
primeiro, como no exemplo acima.fonte
# pylint: disable=foo
inlyne me faz ficar muito tempo, então agora preciso adicionar, line-too-long
! Ironia; era disso que eu precisava e resolve meu problema. Obrigado!Para desativar um aviso localmente em um bloco, adicione
para esse bloco.
fonte
[pylint] C0111: Missing method docstring
; portanto, é fácil encontrar o número do código, mas encontrar o nome simbólico significa que tenho que procurar.Existem várias maneiras de desativar avisos e erros do Pylint. Qual deles usar tem a ver com o quão global ou localmente você deseja aplicar a desativação - uma importante decisão de design.
Várias abordagens
pylintrc
arquivos.Isso envolve mais do que o
~/.pylintrc
arquivo (no diretório $ HOME), conforme descrito por Chris Morgan. O Pylint procurará arquivos rc, com uma precedência que valorize os arquivos "mais próximos" mais altamente:Um
pylintrc
arquivo no diretório de trabalho atual; ouSe o diretório de trabalho atual estiver em um módulo Python (ou seja, ele contém um
__init__.py
arquivo), procure na hierarquia dos módulos Python até que umpylintrc
arquivo seja encontrado; ouO arquivo nomeado pela variável de ambiente PYLINTRC; ou
Se você possui um diretório inicial que não é
/root
:~/.pylintrc
; ou~/.config/pylintrc
; ou/etc/pylintrc
Observe que a maioria desses arquivos é nomeada
pylintrc
- apenas o arquivo~
possui um ponto inicial.No seu
pylintrc
arquivo, adicione linhas para desativar mensagens específicas de pilões. Por exemplo:Desativa ainda mais a partir da
pylint
linha de comando, conforme descrito por Aboo e Cairnarvon. Isso parecepylint --disable=bad-builtin
. Repita--disable
para suprimir itens adicionais.Desativa ainda mais as linhas de código Python individuais, conforme descrito por Imolit. Eles se parecem com
some statement # pylint: disable=broad-except
(comentário extra no final da linha de origem original) e se aplicam apenas à linha atual . Minha abordagem é sempre colocá-las no final de outras linhas de código para que não sejam confundidas com o estilo do bloco, veja abaixo.Desativa ainda mais definido para blocos maiores de código Python, até completar os arquivos de origem.
Eles se parecem
# pragma pylint: disable=bad-whitespace
(observe apragma
palavra-chave).Isso se aplica a todas as linhas após o pragma. Colocar um bloco no topo de um arquivo faz com que as supressões se apliquem a todo o arquivo. Colocar o mesmo bloco mais baixo no arquivo os aplica apenas às linhas que seguem o bloco. Minha abordagem é sempre colocá-los em uma linha própria, para que não sejam confundidos com o estilo de linha única, veja acima.
Quando uma supressão deve ser aplicada apenas dentro de um intervalo de código, use
# pragma pylint: enable=bad-whitespace
(agora usandoenable
nãodisable
) para interromper a supressão.Observe que a desativação de uma única linha usa a
# pylint
sintaxe, enquanto a desativação dessa linha em diante usa a# pragma pylint
sintaxe. Estes são fáceis de confundir, especialmente ao copiar e colar.Juntando tudo
Eu costumo usar uma mistura dessas abordagens.
Eu uso
~/.pylintrc
para padrões absolutamente globais - muito poucos deles.Uso o nível do projeto
pylintrc
em diferentes níveis nos módulos Python quando existem padrões específicos do projeto. Especialmente quando você recebe o código de outra pessoa ou equipe, pode achar que eles usam convenções que você não prefere, mas não deseja refazer o código. Manter as configurações nesse nível ajuda a não espalhar essas práticas para outros projetos.Eu uso os pragmas de estilo de bloco na parte superior dos arquivos de origem únicos. Gosto de desativar os pragmas (pare de suprimir as mensagens) no calor do desenvolvimento, mesmo para os padrões Pylint com os quais não concordo (como "muito poucos métodos públicos" - sempre recebo esse aviso nas classes Exception personalizadas) - mas é útil ver mais / talvez todas as mensagens Pylint enquanto você está desenvolvendo. Dessa forma, você pode encontrar os casos que deseja resolver com pragmas de linha única (veja abaixo) ou apenas adicionar comentários ao próximo desenvolvedor para explicar por que esse aviso está correto neste caso.
Deixo alguns pragmas em estilo de bloco ativados mesmo quando o código está pronto para o check-in. Tento usar alguns deles, mas quando faz sentido para o módulo, não há problema em fazer isso como documentação. No entanto, tento deixar o mínimo possível, de preferência nenhum.
Eu uso o estilo de comentário de linha única para solucionar erros especialmente potentes. Por exemplo, se há um lugar onde realmente faz sentido
except Exception as exc
, eu coloco a# pylint: disable=broad-except
linha nessa linha, em vez de uma abordagem mais global, porque essa é uma exceção estranha e precisa ser destacada, basicamente como uma forma de documentação.Como tudo no Python, você pode agir em diferentes níveis de indireção. Meu conselho é pensar no que pertence a qual nível, para que você não tenha uma abordagem muito branda ao Pylint.
fonte
~/.pylintrc
. IMHO, a configuração normalmente deve estar vinculada ao projeto e, portanto, deve estar em algum lugar dentro do projeto. Somente então ele poderá ser controlado por versão e compartilhado com o projeto. Caso contrário, um clone pode não ter as personalizações necessárias para o pylint sair sem imprimir mensagens.pragma
parece totalmente desnecessário. Por exemplo, eu tenho# pylint: disable=missing-docstring
na parte superior do meu arquivo, e isso se aplica a todo o restante do arquivo. Verifique e remova opragma
prefixo da sua resposta.Você também pode usar o seguinte comando:
Minha versão pylint é 0.25.1.
fonte
--py3k
bandeira quer :(rc
arquivo e (mais preocupante) na verdade gera umrc
arquivo correto com--generate-rcfile
. Código precisar amor com várias ramificações que fazem a mesma coisa :(Esta é uma FAQ :
Você pode desativar as mensagens:
E1101
,E1102
etc.no-member
,undefined-variable
etc.pylint --list-groups
.C
,R
,W
, etc.all
.Veja os documentos (ou execute
pylint --list-msgs
no terminal) para obter a lista completa depylint
mensagens. Os documentos também fornecem um bom exemplo de como usar esse recurso.fonte
Você só precisa adicionar uma linha para desativar o que deseja desativar. Por exemplo
Adicione isso no nº 1 do seu módulo
fonte
Caso isso ajude alguém, se você estiver usando o Visual Studio Code, espera que o arquivo esteja na codificação UTF8. Para gerar o arquivo, executei
pylint --generate-rcfile | out-file -encoding utf8 .pylintrc
no PowerShell.fonte
De acordo com a documentação do pylint , o mais fácil é usar este gráfico :
Então, pode-se usar:
fonte
A sintaxe do Python permite mais de uma instrução em uma linha, separada por ponto e vírgula (;). No entanto, limitar cada linha a uma instrução torna mais fácil para um ser humano seguir a lógica de um programa ao lê-la.
Portanto, outra maneira de resolver esse problema é entender por que a mensagem do fiapo existe e não colocar mais de uma declaração em uma linha.
Sim, você pode achar mais fácil escrever várias instruções por linha; no entanto, o pylint é para todos os outros leitores do seu código, não apenas para você.
fonte
Você pode tentar o seguinte:
Edite "C: \ Usuários \ Seu Usuário \ AppData \ Roaming \ Código \ Usuário \ settings.json" e adicione
python.linting.pylintArgs
linhas no final, como mostrado abaixo:fonte