¿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
El gato no divertido
fuente

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.

jomo
fuente
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
El gato no divertido
fuente
¿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

Básico
fuente
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
loxaxs
fuente
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