¿Es posible ignorar una sola línea específica con pylint?


150

Tengo la siguiente línea en mi encabezado:

import config.logging_settings

En realidad, esto cambia la configuración de registro de Python, pero pylint cree que es una importación no utilizada. No quiero eliminar las unused-importadvertencias en general, ¿es posible ignorar esta línea específica?

No me importaría tener un .pylintrcpara este proyecto, por lo que se aceptarán las respuestas que cambien un archivo de configuración.

De lo contrario, algo como esto también será apreciado:

import config.logging_settings # pylint: disable-this-line-in-some-way

Respuestas:


227

El control de mensajes de Pylint está documentado en el manual de Pylint :

¿Es posible deshabilitar 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
al nivel de bloque deseado o al final de la línea de código deseada

Puede usar el código del mensaje o los nombres simbólicos.

Por ejemplo

def test():
    # Disable all the no-member violations in this function
    # pylint: disable=no-member
    ...
global VAR # pylint: disable=global-statement

El manual también tiene más ejemplos .

Hay una wiki que documenta todos los mensajes Pylint y sus códigos.


Me gusta flake8 s # noqa. No quiero ver tantos comentarios en el código. # nolintSería aún más claro.
Nils Lindemann

61
import config.logging_settings # pylint: disable=W0611

Eso fue simple y es específico para esa línea.

Como sthenault señaló amablemente, puede y debe usar la forma más legible:

import config.logging_settings # pylint: disable=unused-import

¿De dónde sacas el símbolo explícito del mensaje? Mi linter (el que está en Spyder) no lo informa y el wiki vinculado en la respuesta de jomo tampoco lo enumera.
Joooeey

Quieres decir unused-import? Creo que mi linter me dio una advertencia cuando utilicé W0611, pero han pasado más de 3 años, así que no recuerdo: / Lo siento
The Unfun Cat

4

Creo que lo que estás buscando es ...

import config.logging_settings  # @UnusedImport

Tenga en cuenta el doble espacio antes del comentario para evitar tocar otras advertencias de formato.

Además, dependiendo de su IDE (si está usando uno), probablemente haya una opción para agregar la regla de ignorar correcta (por ejemplo, al presionar el eclipse Ctrl1mientras el cursor está sobre la advertencia, la advertencia sugerirá automáticamente@UnusedImport


2
Esto podría funcionar para algunos IDE, pero no funcionó emacs/flycheck. Gracias. Mantenga la respuesta ya que podría ayudar a alguien más.
The Unfun Cat

Esto no funciona cuando se ejecuta pylinto flake8desde la línea de comandos.
Jacob Tomlinson

@JacobTomlinson Interesante, gracias. Es lo que acepta Pydev y tenía la impresión de que pyclipse simplemente se convirtió en pylint. Debe estar ligeramente personalizado o tal vez eclipse esté procesando esas directivas y suprimiendo la salida.
Básico

4

Verifique los archivos en https://github.com/PyCQA/pylint/tree/master/pylint/checkers . No he encontrado una mejor manera de obtener el nombre del error de un mensaje que Ctrl + F-ing esos archivos o usando la función de búsqueda Github:

Si el mensaje es "Sin nombre ... en el módulo ...", utilice la búsqueda:

No name %r in module %r repo:PyCQA/pylint/tree/master path:/pylint/checkers

O, para obtener menos resultados:

"No name %r in module %r" repo:PyCQA/pylint/tree/master path:/pylint/checkers

Github te mostrará:

"E0611": (
    "No name %r in module %r",
    "no-name-in-module",
    "Used when a name cannot be found in a module.",

Entonces puedes hacer:

from collections import Sequence # pylint: disable=no-name-in-module

1
puedes encontrarlos en los documentos
Esteban

Gracias, es mucho mejor que pasar por la fuente. Encontré dos espejos más para el documento de Pylint. Aparentemente, readthedoc es el espejo oficial. El otro es pylint.org
loxaxs
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.