Estoy tratando de desactivar la advertencia C0321 ("más de una declaración en una sola línea", a menudo pongo if
declaraciones con resultados cortos de una sola línea en la misma línea), en Pylint 0.21.1 (si es importante: astng 0.20. 1, común 0.50.3, Python 2.6.6 (r266: 84292, 15 de septiembre de 2010, 16:22:56)).
Intenté agregar disable=C0321
el archivo de configuración de Pylint, pero Pylint insiste en informarlo de todos modos. Variaciones sobre esa línea (como disable=0321
o disable=C321
) se marcan como errores, por lo Pylint hace reconocer la opción adecuada, es simplemente ignorarlo.
¿Es esto un error de Pylint, o estoy haciendo algo mal? ¿Hay alguna forma de evitar esto? Realmente me gustaría deshacerme de este ruido.
Respuestas:
pylint --generate-rcfile
lo muestra así:Por lo tanto, parece que
~/.pylintrc
debería tener lasdisable=
líneas dentro de una sección[MESSAGES CONTROL]
.fuente
~/.pylintrc
con dos líneas[MESSAGES CONTROL]
ydisable=C0321
. Eso evita ese mensaje.Tuve este problema usando Eclipse y lo resolví de la siguiente manera:
en la carpeta pylint (por ejemplo
C:\Python26\Lib\site-packages\pylint
), mantenga presionada la tecla Mayús, haga clic con el botón derecho y elija abrir el comando de Windows en esa carpeta. Tipo:Esto crea el
standard.rc
archivo de configuración. Ábralo en el bloc de notas y debajo[MESSAGES CONTROL]
, descomentedisable=
y agregue las ID de mensaje que desea deshabilitar, por ejemplo:Guarde el archivo, y en Eclipse-> ventana-> preferencias-> PyDev-> pylint, en el cuadro de argumentos, escriba:
Ahora debería funcionar ...
También puede agregar un comentario en la parte superior de su código que será interpretado por pylint:
enlace a todos los códigos de mensajes pylint
Agregar, por ejemplo,
--disable-ids=C0321
en el cuadro de argumentos no funciona. Todos los mensajes de pylint disponibles se almacenan en el diccionario_messages
, un atributo de una instancia de lapylint.utils.MessagesHandlerMixIn
clase. Al ejecutar pylint con el argumento--disable-ids=...
(al menos sin un archivo de configuración), este diccionario está inicialmente vacío, provocando una excepción KeyError dentro de pylint (pylint.utils.MessagesHandlerMixIn.check_message_id()
. En Eclipse, puede ver este mensaje de error en la consola de Pylint (windows - show view - Console , seleccione la consola Pylint de las opciones de la consola además del icono de la consola).fuente
A partir de Pylint v. 0.25.3, puede usar los nombres simbólicos para deshabilitar las advertencias en lugar de tener que recordar todos esos números de código . P.ej:
Este estilo es más instructivo que los códigos de error crípticos, y también más práctico ya que las versiones más nuevas de Pylint solo muestran el nombre simbólico, no el código de error.
La correspondencia entre nombres simbólicos y códigos se puede encontrar aquí .
Se puede insertar un comentario de desactivación en su propia línea, aplicando la desactivación a todo lo que viene después en el mismo bloque. Alternativamente, se puede insertar al final de la línea para la cual se debe aplicar.
Si pylint emite
Locally disabling
mensajes " ", puede deshacerse de ellos incluyendolocally-disabled
primero la desactivación como en el ejemplo anterior.fuente
# pylint: disable=foo
inlyne me hace esperar demasiado, así que ahora necesito agregar, line-too-long
. Lengua en la mejilla; Esto era lo que necesitaba y resuelve mi problema. ¡Gracias!Para deshabilitar una advertencia localmente en un bloque, agregue
a ese bloque
fuente
[pylint] C0111: Missing method docstring
, así que encontrar el número de código es fácil, pero encontrar el nombre simbólico significa que tengo que buscarlo.Hay varias formas de deshabilitar las advertencias y errores de Pylint. Cuál usar tiene que ver con qué nivel global o local desea aplicar la desactivación, una decisión de diseño importante.
Enfoques múltiples
pylintrc
archivos.Esto implica más que el
~/.pylintrc
archivo (en su directorio $ HOME) como lo describe Chris Morgan. Pylint buscará archivos rc, con una precedencia que valora más los archivos "más cercanos":Un
pylintrc
archivo en el directorio de trabajo actual; oSi el directorio de trabajo actual está en un módulo de Python (es decir, contiene un
__init__.py
archivo), buscar en la jerarquía de los módulos de Python hasta encontrar unpylintrc
archivo; oEl archivo nombrado por la variable de entorno PYLINTRC; o
Si tiene un directorio de inicio que no es
/root
:~/.pylintrc
; o~/.config/pylintrc
; o/etc/pylintrc
Tenga en cuenta que la mayoría de estos archivos tienen nombre
pylintrc
, solo el archivo en~
tiene un punto inicial.A su
pylintrc
archivo, agregue líneas para deshabilitar mensajes específicos de pylint. Por ejemplo:Más desactiva desde la
pylint
línea de comando, como se describe por Aboo y Cairnarvon. Esto se parecepylint --disable=bad-builtin
. Repita--disable
para suprimir elementos adicionales.Deshabilita aún más las líneas de código individuales de Python, como lo describe Imolit. Estos se ven como
some statement # pylint: disable=broad-except
(comentario adicional al final de la línea de origen original) y se aplican solo a la línea actual . Mi enfoque es ponerlos siempre al final de otras líneas de código para que no se confundan con el estilo de bloque, ver más abajo.Más desactivaciones definidas para bloques más grandes de código Python, hasta completar archivos fuente.
Estos se ven como
# pragma pylint: disable=bad-whitespace
(tenga en cuenta lapragma
palabra clave).Estos se aplican a cada línea después de la pragma. Al poner un bloque de estos en la parte superior de un archivo, las supresiones se aplican a todo el archivo. Colocar el mismo bloque más abajo en el archivo hace que se apliquen solo a las líneas que siguen al bloque. Mi enfoque es ponerlos siempre en una línea propia para que no se confundan con el estilo de una sola línea, ver arriba.
Cuando una supresión solo debe aplicarse dentro de un rango de código, use
# pragma pylint: enable=bad-whitespace
(ahora usandoenable
notdisable
) para detener la supresión.Tenga en cuenta que la desactivación de una sola línea utiliza la
# pylint
sintaxis, mientras que la desactivación de esta línea en adelante utiliza la# pragma pylint
sintaxis. Estos son fáciles de confundir, especialmente al copiar y pegar.Poniendolo todo junto
Usualmente uso una combinación de estos enfoques.
Lo uso
~/.pylintrc
para estándares absolutamente globales, muy pocos de estos.Uso el nivel de proyecto
pylintrc
en diferentes niveles dentro de los módulos de Python cuando hay estándares específicos del proyecto. Especialmente cuando aceptas el código de otra persona o equipo, puedes encontrar que usan convenciones que no prefieres, pero no quieres volver a trabajar el código. Mantener la configuración en este nivel ayuda a no difundir esas prácticas a otros proyectos.Uso los pragmas de estilo de bloque en la parte superior de los archivos de origen único. Me gusta desactivar los pragmas (dejar de suprimir mensajes) en pleno desarrollo incluso para los estándares de Pylint con los que no estoy de acuerdo (como "muy pocos métodos públicos", siempre recibo esa advertencia en las clases de excepción personalizadas), pero es útil ver más / tal vez todos los mensajes de Pylint mientras se está desarrollando. De esa manera, puede encontrar los casos que desea abordar con pragmas de una sola línea (ver más abajo), o simplemente agregar comentarios para el próximo desarrollador para explicar por qué esa advertencia está bien en este caso.
Dejo algunos de los pragmas de estilo de bloque habilitados incluso cuando el código está listo para registrarse. Intento usar algunos de esos, pero cuando tiene sentido para el módulo, está bien hacerlo como documentación. Sin embargo, trato de dejar lo menos posible, preferiblemente ninguno.
Utilizo el estilo de comentario de una sola línea para abordar errores especialmente potentes. Por ejemplo, si hay un lugar en el que realmente tiene sentido hacerlo
except Exception as exc
, lo pongo# pylint: disable=broad-except
en esa línea en lugar de un enfoque más global porque esta es una excepción extraña y debe llamarse, básicamente como una forma de documentación.Como todo lo demás en Python, puede actuar en diferentes niveles de indirección. Mi consejo es pensar en lo que pertenece a qué nivel para que no termines con un enfoque demasiado indulgente para Pylint.
fuente
~/.pylintrc
. En mi humilde opinión, la configuración normalmente debe estar vinculada al proyecto, por lo que debe estar en algún lugar dentro del proyecto. Solo entonces se puede controlar la versión y compartir con el proyecto. De lo contrario, un clon puede carecer de las personalizaciones necesarias para que pylint salga sin imprimir mensajes.pragma
parece totalmente innecesario. Por ejemplo, tengo# pylint: disable=missing-docstring
en la parte superior de mi archivo, y se aplica a todo el resto del archivo. Verifique y elimine elpragma
prefijo de su respuesta.También puede usar el siguiente comando:
Mi versión de pylint es 0.25.1.
fuente
--py3k
bandera :(rc
archivo, y (más problemático) en realidad genera unrc
archivo correcto--generate-rcfile
. Tengo que amar el código con múltiples ramas que hacen lo mismo :(Esta es una pregunta frecuente :
Puede deshabilitar los mensajes de la siguiente manera:
E1101
,E1102
etc.no-member
,undefined-variable
etc.pylint --list-groups
.C
,R
,W
, etc.all
.Ver los documentos (o ejecutar
pylint --list-msgs
en la terminal) para la lista completa depylint
mensajes de. Los documentos también proporcionan un buen ejemplo de cómo usar esta función.fuente
Solo tiene que agregar una línea para deshabilitar lo que desea deshabilitar. P.ej
Agregue esto al # 1 en su módulo
fuente
En caso de que esto ayude a alguien, si está usando Visual Studio Code, espera que el archivo esté en codificación UTF8. Para generar el archivo, ejecuté
pylint --generate-rcfile | out-file -encoding utf8 .pylintrc
en PowerShell.fuente
Según la documentación de pylint , lo más fácil es usar este cuadro :
Entonces uno puede usar:
fuente
La sintaxis de Python permite más de una declaración en una línea, separada por punto y coma (;). Sin embargo, limitar cada línea a una declaración facilita que un humano siga la lógica de un programa al leerla.
Entonces, otra forma de resolver este problema es entender por qué está presente el mensaje de pelusa y no poner más de una declaración en una línea.
Sí, puede que le resulte más fácil escribir varias declaraciones por línea, sin embargo, pylint es para todos los demás lectores de su código, no solo para usted.
fuente
Es posible que desee probar esto:
Edite "C: \ Users \ Your User \ AppData \ Roaming \ Code \ User \ settings.json" y agregue
python.linting.pylintArgs
líneas al final como se muestra a continuación:fuente