Pylint deshabilita todas las advertencias para un archivo

Estamos usando pylint dentro de nuestro sistema de comstackción. Tenemos un paquete de Python dentro de nuestra base de código que tiene un código desechable, y me gustaría deshabilitar todas las advertencias para un módulo temporalmente para que pueda dejar de molestar a los otros desarrolladores con estos mensajes superfluos. ¿Hay una manera fácil de hacer pylint: disable todas las advertencias para un módulo?

De las preguntas frecuentes de PyLint

Con Pylint <0.25, agregue

 # pylint: disable-all 

Al principio del módulo.

Pylint 0.26.1 y versiones posteriores han cambiado el nombre de esa directiva a

 # pylint: skip-file 

(pero la primera versión se mantendrá para compatibilidad con versiones anteriores).

Para facilitar la búsqueda de los módulos que se ignoran, se emite un mensaje de nivel de información I0013. Con las versiones recientes de Pylint, si usa la syntax anterior, se emite un mensaje I0014 adicional.

PyLint tiene cinco “categorías” para mensajes (de los cuales estoy al tanto).

Estas categorías eran muy obvias en el pasado, pero los mensajes Pylint numerados ahora han sido reemplazados por nombres. Por ejemplo, C0302 es ahora too-many-lines . Pero la ‘C’ nos dice que too-many-lines es un mensaje de la Convención . Esto es confuso, porque los mensajes de la Convención con frecuencia solo aparecen como una advertencia, ya que muchos sistemas (como Syntastic ) parecen clasificar todo como advertencia o error. Sin embargo, el informe de PyLint aún divide las cosas en estas categorías, por lo que todavía es definitivamente compatible.

Su pregunta se refiere específicamente a las Advertencias , y todos los nombres de los mensajes de Advertencia de PyLint comienzan con ‘W’.

Fue un poco difícil para mí rastrear esto, pero esta respuesta finalmente me llevó a la respuesta. PyLint aún admite la desactivación de categorías completas de mensajes. Entonces, para deshabilitar todas las Advertencias , harías:

 disable=W 

Esto se puede utilizar en la línea de comandos:

 $ pylint --disable=W myfile.py 

O bien, puede ponerlo en su archivo pylintrc:

 [MESSAGES CONTROL] disable=W 

Nota: es posible que ya tenga la opción de disable en su archivo rc, en cuyo caso debe agregar la ‘W’ a esta lista.

O bien, puede colocarlo en línea en su código, donde funcionará para el ámbito en el que se coloca:

 # pylint: disable=W 

Para deshabilitarlo para un archivo completo, es mejor colocarlo en la parte superior del archivo. Sin embargo, incluso en la parte superior del archivo, descubrí que aún recibía el mensaje de advertencia de las trailing-newlines (técnicamente una advertencia de convención , pero estoy llegando a eso).

En mi caso, tenía una biblioteca escrita por alguien de hace mucho tiempo. Funcionó bien, así que realmente no había necesidad de preocuparse por la convención moderna de Python, etc. Lo único que me importaba eran los errores que probablemente romperían mi código.

Mi solución fue deshabilitar todos los mensajes de advertencia , convención y refactorización para este único archivo colocando el siguiente comando de PyLint en la primera línea:

 # pylint: disable=W,C,R 

Aparte del mensaje mencionado anteriormente para las nuevas líneas, esto hizo exactamente lo que necesitaba.

Sí, puede especificar # pylint: skip-file , pero es una mala práctica desactivar todas las advertencias para un archivo. El código desechable no debe existir en una twig que se analiza por pylint.

Si desea deshabilitar solo advertencias específicas, esto puede hacerse agregando un comentario como # pylint: disable=message-name para deshabilitar el mensaje especificado por el rest del archivo, o al menos hasta que # pylint: enable=message-name

Ejemplo:

 # 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 

Otra opción es usar la opción de línea de comandos --ignore para omitir el análisis de algunos archivos.

Mi caso de uso es ejecutar pylint *.py para procesar todos los archivos en un directorio, excepto que quiero omitir un archivo en particular.

Agregar #pylint: skip-file causó que pylint fallara con I: 8, 0: Ignoring entire file (file-ignored) . Agregar #pylint: disable=file-ignored no soluciona eso. Presumiblemente, es un error global en lugar de uno específico del archivo.

La solución fue incluir --disable=file-ignored en las opciones del comando pylint. Tomó demasiado tiempo para resolver esto; no debe haber un error de file-ignored cuando ignora explícitamente un archivo.