Pylint deshabilita todas las advertencias para un archivo

86

Estamos usando pylint dentro de nuestro sistema de construcción. Tenemos un paquete de Python dentro de nuestra base de código que tiene código desechable, y me gustaría deshabilitar todas las advertencias de un módulo temporalmente para poder dejar de molestar a los otros desarrolladores con estos mensajes superfluos. ¿Existe una forma sencilla de acceder a pylint: disabletodas las advertencias de un módulo?

mvanveen
fuente

Respuestas:

120

De las preguntas frecuentes de PyLint

Con Pylint <0.25, agregue

# pylint: disable-all

al comienzo del módulo.

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

# pylint: skip-file

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

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

enderskill
fuente
2
Nota: esto deshabilitará todas las advertencias y todos los errores . Si está buscando una forma de deshabilitar solo las advertencias, consulte mi respuesta en esta página.
eatcrayons
31

PyLint tiene cinco "categorías" para mensajes (de las que soy consciente).

Estas categorías eran muy obvias en el pasado, pero los mensajes Pylint numerados ahora han sido reemplazados por nombres. Por ejemplo, C0302es ahora too-many-lines. Pero la 'C' nos dice que too-many-lineses un mensaje de la Convención . Esto es confuso, porque los mensajes de la Convención con frecuencia aparecen como una advertencia, ya que muchos sistemas (como Syntastic ) parecen clasificar todo como una advertencia o un error. Sin embargo, el informe de PyLint todavía divide las cosas en estas categorías, por lo que definitivamente es 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 todavía admite la desactivación de categorías completas de mensajes. Entonces, para deshabilitar todas las advertencias , haría lo siguiente:

disable=W

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

$ pylint --disable=W myfile.py

O puede ponerlo en su archivo pylintrc:

[MESSAGES CONTROL]
disable=W

Nota: es posible que ya tenga la disableopción en su archivo rc, en cuyo caso debe agregar la 'W' a esta lista.

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

# pylint: disable=W

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

En mi caso, tenía una biblioteca escrita por alguien de hace mucho tiempo. Funcionó bien, por lo que realmente no había necesidad de preocuparse por la convención moderna de Python, etc. Lo único que realmente 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 archivo solo colocando el siguiente comando de PyLint en la primera línea:

# pylint: disable=W,C,R

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

Eatcrayons
fuente
15

Sí, puede especificarlo # pylint: skip-fileen el archivo, pero es una mala práctica desactivar todas las advertencias de un archivo.

Si solo desea deshabilitar advertencias específicas, puede hacerlo agregando un comentario como # pylint: disable=message-namepara deshabilitar el mensaje especificado para el resto del archivo, o al menos hasta # 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
Acumenus
fuente
Para evitar que le digan que se ha deshabilitado una advertencia específica como esta, disable=locally-disabledse puede agregar al archivo pylintrc.
Coronel Fazackerley
6

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

sthenault
fuente
0

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

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

La solución fue incluir --disable=file-ignoreden las opciones del comando pylint. Me tomó demasiado tiempo darme cuenta de esto; no debería haber un file-ignorederror cuando ignora explícitamente un archivo.

Brusco
fuente
1
Más idealmente, colóquelo en un pylintrcarchivo de configuración, no en una opción de comando.
Acumenus