¿Cómo desactivo una advertencia de Pylint?

Resuelto Head Geek asked hace 14 años • 14 respuestas

Estoy intentando desactivar la advertencia C0321 ("más de una declaración en una sola línea"; a menudo pongo ifdeclaraciones 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 y Python 2.6.6 (r266:84292, 15 de septiembre de 2010, 16:22:56)).

Intenté agregar disable=C0321el archivo de configuración de Pylint, pero Pylint insiste en informarlo de todos modos. Las variaciones en esa línea (como disable=0321o disable=C321) se marcan como errores, por lo que Pylint reconoce la opción correctamente. 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 algo de este ruido.

Head Geek avatar Dec 03 '10 08:12 Head Geek
Aceptado

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:

# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long

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.

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 a la que se aplica.

Si Pylint genera Locally disablingmensajes " ", puede deshacerse de ellos incluyendo la desactivación locally-disabled primero como en el ejemplo anterior.

imolit avatar May 08 '2014 13:05 imolit

pylint --generate-rcfilelo 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=

Entonces parece que ~/.pylintrcdeberías tener las disable=líneas dentro de una sección [MESSAGES CONTROL].

Chris Morgan avatar Dec 03 '2010 02:12 Chris Morgan

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 presionado Shift, haga clic derecho y elija abrir el comando de Windows en esa carpeta. Tipo:

lint.py --generate-rcfile > standard.rc

Esto crea el standard.rcarchivo de configuración. Ábralo en el Bloc de notas y en [MESSAGES CONTROL], descomente disable=y agregue los ID de mensaje que desea desactivar, por ejemplo:

disable=W0511, C0321

Guarde el archivo y en Eclipse → VentanaPreferenciasPyDev → *pylint, en el cuadro de argumentos, escriba:

--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rc

Ahora debería funcionar...


También puedes agregar un comentario en la parte superior de tu código que será interpretado por Pylint:

# pylint: disable=C0321

Códigos de mensaje de Pylint .


Agregar, por ejemplo, --disable-ids=C0321en 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 pylint.utils.MessagesHandlerMixInclase. Cuando se ejecuta Pylint con el argumento --disable-ids=...(al menos sin un archivo de configuración), este diccionario está inicialmente vacío, lo que genera 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* → mostrar vistaConsola , seleccione Consola Pylint en las opciones de la consola además del ícono de la consola).

Remi avatar Jul 16 '2011 19:07 Remi

Para deshabilitar una advertencia localmente en un bloque, agregue

# pylint: disable=C0321

a ese bloque.

thakis avatar Dec 26 '2013 18:12 thakis

Hay varias formas de desactivar advertencias y errores de Pylint. Cuál usar tiene que ver con qué tan global o localmente desea aplicar la desactivación, una decisión de diseño importante.

Múltiples enfoques

  1. En uno o más pylintrcarchivos.

Esto implica más que el ~/.pylintrcarchivo (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 pylintrcarchivo en el directorio de trabajo actual; o

  • Si el directorio de trabajo actual está en un módulo de Python (es decir, contiene un __init__.pyarchivo), buscar en la jerarquía de módulos de Python hasta pylintrcencontrar un archivo; o

  • El 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 ~tiene un punto inicial.

A su pylintrcarchivo, agregue líneas para deshabilitar mensajes pylint específicos. Por ejemplo:

[MESSAGES CONTROL]
disable=locally-disabled
  1. Se desactiva aún más desde la pylintlínea de comando, como lo describen Aboo y Cairnarvon. Esto parece pylint --disable=bad-builtin. Repita --disablepara suprimir elementos adicionales.

  2. Se deshabilita aún más desde líneas de código Python individuales, como lo describe Imolit. Estos se parecen a 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 colocarlos siempre al final de otras líneas de código para que no se confundan con el estilo de bloque, ver más abajo.

  3. Se definen más deshabilitaciones para bloques más grandes de código Python, hasta archivos fuente completos.

    • Estos se parecen # pragma pylint: disable=bad-whitespace(tenga en cuenta la pragmapalabra clave).

    • Estos se aplican a cada línea 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. Poner 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 deba aplicarse dentro de un lapso de código, use # pragma pylint: enable=bad-whitespace(ahora usando enablenot disable) para detener la supresión.

Tenga en cuenta que deshabilitar para una sola línea usa la # pylintsintaxis, mientras que deshabilitar para esta línea en adelante usa la # pragma pylintsintaxis. Estos son fáciles de confundir, especialmente al copiar y pegar.

Poniendolo todo junto

Normalmente uso una combinación de estos enfoques.

  • Utilizo ~/.pylintrcestándares absolutamente globales, muy pocos de estos.

  • Utilizo el nivel de proyecto pylintrcen diferentes niveles dentro de los módulos de Python cuando existen estándares específicos del proyecto. Especialmente cuando estás tomando código de otra persona o equipo, es posible que descubras que usan convenciones que no prefieres, pero que no deseas volver a trabajar en 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 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 (o quizás todos) los mensajes de Pylint mientras desarrollas. 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 que el siguiente desarrollador explique por qué esa advertencia está bien en este caso.

  • Dejo habilitados algunos de los pragmas de estilo de bloque incluso cuando el código está listo para registrarse. Intento usar algunos de ellos, pero cuando tiene sentido para el módulo, está bien usarlos como documentación. Sin embargo, trato de dejar la menor cantidad posible, preferiblemente ninguna.

  • Utilizo 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 en # pylint: disable=broad-exceptesa línea en lugar de un enfoque más global porque es una excepción extraña y debe mencionarse, básicamente como una forma de documentación.


Como todo lo demás en Python, puedes actuar en diferentes niveles de direccionamiento indirecto. Mi consejo es pensar qué pertenece a qué nivel para no terminar con un enfoque demasiado indulgente con Pylint.

Chris Johnson avatar Sep 19 '2015 18:09 Chris Johnson