python - linter - run pylint visual studio code
¿Cómo desactivo una advertencia de Pylint? (9)
Intento desactivar la advertencia C0321 ("más de un enunciado en una sola línea" - A menudo pongo declaraciones con resultados únicos 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
en el archivo de configuración de Pylint, pero Pylint insiste en informarlo de todos modos. Las variaciones en esa línea (como disable=0321
o disable=C321
) se marcan como errores, por lo que Pylint reconoce la opción correctamente, simplemente la ignora.
¿Es esto un error de Pylint, o estoy haciendo algo mal? ¿Hay alguna forma de evitar esto? Realmente me gustaría deshacerme de algo de este ruido.
A partir de Pylint v. 0.25.3, puede usar los nombres simbólicos para los mensajes en lugar de recordar todos esos números de código . P.ej:
# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long
El comentario anterior se puede insertar al final de la línea para la que se debe aplicar. En este caso, incluya locally-disabled
primero como se muestra arriba, en cuyo caso, puede incluirse un mensaje de "Inutilización Locally disabling
" mediante la inserción de una pila. Sin embargo, si recibe un mensaje de useless-suppression
, elimine locally-disabled
.
Este estilo es en mi humilde opinión más práctico que deshabilitar el código de error, especialmente porque las versiones más recientes de Pylint solo muestran el nombre simbólico, no el código de error.
En caso de que esto ayude a alguien, si está usando el código de Visual Studio, espera que el archivo esté en codificación UTF8. Para generar el archivo, ejecuté pylint --generate-rcfile | out-file -encoding utf8 .pylintrc
pylint --generate-rcfile | out-file -encoding utf8 .pylintrc
en PowerShell.
Esta es una FAQ :
4.1 ¿Es posible desactivar localmente un mensaje en particular?
Sí, esta característica se ha agregado en Pylint 0.11. Esto se puede hacer agregando
"#pylint: disable = some-message, another-one" en el nivel de bloque deseado o al final de la línea de código deseada.
Puede deshabilitar los mensajes por código o por nombre simbólico. Consulte los docs (o ejecute pylint --list-msgs
en el terminal) para obtener la lista completa de los mensajes de la lista.
Los documentos también proporcionan un buen example de cómo usar esta función.
Hay varias maneras de desactivar advertencias y errores de Pylint. Cuál usar tiene que ver con qué nivel global o local desea aplicar la inhabilitación, una importante decisión de diseño.
Enfoques múltiples
- En uno o más archivos
pylintrc
.
Esto implica más que el archivo ~/.pylintrc
(en su directorio $ HOME) como lo describe Chris Morgan. Pylint buscará archivos rc, con una prioridad que valora más los archivos "más cercanos":
Un archivo
pylintrc
en el directorio de trabajo actual; oSi el directorio de trabajo actual está en un módulo de Python (es decir, contiene un archivo
__init__.py
),__init__.py
la jerarquía de los módulos de Python hasta que encuentre un archivopylintrc
; 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 se denominan pylintrc
; solo el archivo en ~
tiene un punto pylintrc
.
A su archivo pylintrc
, agregue líneas para deshabilitar mensajes específicos de la lista. Por ejemplo:
[MESSAGES CONTROL]
disable=locally-disabled
Más deshabilita de la línea de comando de la
pylint
, como lo describen Aboo y Cairnarvon. Esto se ve como unapylint --disable=bad-builtin
. Repita: se puede--disable
para suprimir elementos adicionales.Además deshabilita las líneas de código de Python individuales, tal como lo describe Imolit. Estos se ven como
some statement # pylint: disable=broad-except
(comentario adicional al final de la línea fuente 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 abajo.Deshabilita aún más para bloques más grandes de código Python, hasta completar los archivos fuente.
Estos se ven como
# pragma pylint: disable=bad-whitespace
(tenga en cuenta la palabra clavepragma
).Estos se aplican a todas las líneas después del pragma. Poner un bloque de estos en la parte superior de un archivo hace que las supresiones se apliquen 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 los confunda con el estilo de una línea, ver arriba.
Cuando una supresión solo debería aplicarse dentro de un intervalo 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 sintaxis # pylint
mientras que la desactivación de esta línea en adelante utiliza la sintaxis # pragma pylint
. Estos son fáciles de confundir, especialmente al copiar y pegar.
Poniendolo todo junto
Usualmente uso una combinación de estos enfoques.
Uso
~/.pylintrc
para estándares absolutamente globales, muy pocos de estos.Utilizo
pylintrc
a nivel depylintrc
en diferentes niveles dentro de los módulos de Python cuando hay estándares específicos de proyecto. Especialmente cuando toma el código de otra persona o equipo, puede encontrar que utilizan convenciones que no prefiere, pero no desea volver a trabajar el código. Mantener la configuración en este nivel ayuda a no extender esas prácticas a otros proyectos.Utilizo los pragmas de estilo de bloque en la parte superior de los archivos fuente individuales. Me gusta apagar los pragmas (dejar de suprimir mensajes) en pleno desarrollo, incluso para los estándares Pylint con los que no estoy de acuerdo (como "muy pocos métodos públicos", siempre recibo esa advertencia en clases de Excepción personalizadas), pero es útil ver más / tal vez todos los mensajes de Pylint mientras desarrollas. De esta forma, puede encontrar los casos que desea abordar con pragmas de una sola línea (ver a continuación), o simplemente agregar comentarios para el próximo desarrollador para explicar por qué esa advertencia es correcta en este caso.
Dejo habilitados algunos de los pragmas de estilo de bloque incluso cuando el código está listo para el check-in. Intento utilizar algunos de ellos, pero cuando tiene sentido para el módulo, está bien hacerlo como documentación. Sin embargo, trato de dejar el menor número posible, preferiblemente ninguno.
Uso el estilo de comentario de una sola línea para abordar errores especialmente potentes. Por ejemplo, si hay un lugar donde realmente tiene sentido hacer
except Exception as exc
, 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 necesita ser llamada fuera, básicamente como una forma de documentación.
Como todo lo demás en Python, puedes actuar en diferentes niveles de indirección. Mi consejo es pensar qué pertenece a qué nivel para que no termines con un enfoque demasiado indulgente con Pylint.
La sintaxis de Python permite más de una declaración en una línea, separadas por punto y coma (;). Sin embargo, al limitar cada línea a una declaración, es más fácil para un humano seguir la lógica de un programa cuando lee a través de ella.
Entonces, otra forma de resolver este problema es entender por qué el mensaje de pelusa está allí y no poner más de una frase en una línea.
Sí, es posible que le resulte más fácil escribir varias declaraciones por línea, sin embargo, la inserción de la lista es para cada otro lector de su código y no solo para usted.
Para desactivar una advertencia localmente en un bloque, agregue
# pylint: disable=C0321
a ese bloque
También puede usar el siguiente comando:
pylint --disable=C0321 test.py
Mi versión de la lista es 0.25.1.
Tuve este problema al usar 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:
lint.py --generate-rcfile > standard.rc
Esto crea el archivo de configuración ''standard.rc''. Ábralo en el bloc de notas y debajo de ''[CONTROL DE MENSAJES]'', elimine el comentario ''desactivar ='' y agregue los ID del mensaje que desea deshabilitar, por ejemplo:
disable=W0511, C0321
Guarde el archivo, y en Eclipse-> window-> preferences-> PyDev-> pylint, en el cuadro de argumentos, escriba:
--rcfile=C:/Python26/Lib/site-packages/pylint/standard.rc
Ahora debería funcionar ...
También puede agregar un comentario en la parte superior de su código que será interpretado por pylint:
# pylint: disable=C0321
enlace a todos los códigos de mensajes de la pila
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 la clase pylint.utils.MessagesHandlerMixIn
. Al ejecutar pylint con el argumento --disable-ids=...
(al menos sin un archivo de configuración), este diccionario está inicialmente vacío, generando una excepción KeyError dentro de pylint (pylint.utils.MessagesHandlerMixIn.check_message_id (). En Eclipse, Puede ver este mensaje de error en la Consola Pylint (ventanas - ver la vista - Consola, seleccionar la consola Pylint desde las opciones de la consola además del icono de la consola).
pylint --generate-rcfile
muestra así:
[MESSAGES CONTROL]
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time.
#enable=
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once).
#disable=
Por lo tanto, parece que su ~/.pylintrc
debe tener la función disable=
línea / s dentro de una sección [MESSAGES CONTROL]
.