¿Cómo desactivo una advertencia Pylint?
Pregunta
Estoy tratando de desactivar la advertencia C0321 ( "más de una sentencia en una sola línea" - A menudo dejo declaraciones if
con resultados a corto de una sola línea en la misma línea), en Pylint 0.21.1 (si importa : astng 0.20.1, 0.50.3 común, Python 2.6.6 (R266: 84 292 15 Sep 2010 16:22:56).)
He intentado añadir disable=C0321
en el fichero de configuración Pylint, pero Pylint insiste en la presentación de informes de todos modos. Variaciones sobre esa línea (como disable=0321
o disable=C321
) se marcan como errores, por lo Pylint hace reconocer la opción adecuada, es simplemente ignorarlo.
Es esto un error Pylint, o estoy haciendo algo mal? ¿Hay alguna forma de evitar esto? Realmente me gustaría deshacerse de parte de este ruido.
Solución
pylint --generate-rcfile
espectáculos de esta manera:
[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=
Así que parece que su ~/.pylintrc
debe tener la línea disable=
/ s en el interior de una sección [MESSAGES CONTROL]
.
Otros consejos
I tenía este problema utilizando Eclipse y resuelto como sigue:
en la carpeta pylint (por ejemplo C:\Python26\Lib\site-packages\pylint
), desplazamiento de retención, haga clic derecho y elegir abrir las ventanas comando en esa carpeta. Tipo:
lint.py --generate-rcfile > standard.rc
Esto crea el fichero de configuración standard.rc
. Abrirlo en el Bloc de notas y bajo [MESSAGES CONTROL]
, elimine
disable=
y añadir el identificador del mensaje es que desea desactivar, por ejemplo:.
disable=W0511, C0321
Guardar el archivo, y en en Eclipse> Ventana-> Preferencias-> PyDev-> pylint, en caja de los argumentos, escriba:
--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rc
Ahora debería funcionar ...
También puede añadir un comentario en la parte superior de su código que será interpretado por pylint:
# pylint: disable=C0321
Enlace a todos los pylint códigos de mensajes
Adición por ejemplo --disable-ids=C0321
en el cuadro argumentos no funciona.
Todos los mensajes pylint disponibles se almacenan en la _messages
diccionario, un atributo de una instancia de la clase pylint.utils.MessagesHandlerMixIn
. Cuando se ejecuta con el pylint --disable-ids=...
argumento (por lo menos sin un archivo de configuración), este diccionario está inicialmente vacío, levantando una excepción dentro de KeyError pylint (pylint.utils.MessagesHandlerMixIn.check_message_id()
.
En Eclipse, se puede ver este mensaje-error en la consola de Pylint (ventanas - Ve -. Consola, seleccione la consola Pylint de las opciones de la consola, además del icono de la consola)
A partir de. Pylint v 0.25.3, puede utilizar los nombres simbólicos para desactivar las advertencias en lugar de tener que recordar todos esos números de código . Por ejemplo:.
# 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 recientes de Pylint sólo se emite el nombre simbólico, no el código de error.
La correspondencia entre nombres simbólicos y códigos puede consultarse aquí .
Un comentario de bloqueo se puede insertar en su propia línea, aplicando el disable para todo lo que viene después en el mismo bloque. Alternativamente, se puede insertar en el extremo de la línea para la que está destinado a aplicar.
Si las salidas pylint mensajes "Locally disabling
", usted puede deshacerse de ellos mediante la inclusión de la locally-disabled
desactivar primero como en el ejemplo anterior.
Para desactivar una advertencia a nivel local en un bloque, añadir
# pylint: disable=C0321
para ese bloque.
Hay varias maneras de desactivar las advertencias y errores de Pylint. Cuál de ellos para su uso tiene que ver con la forma global o local que desea aplicar la inutilización -. Una importante decisión de diseño
múltiples enfoques
- En uno o más archivos
pylintrc
.
Esto implica más que el archivo ~/.pylintrc
(en el directorio $ HOME) como se describe por Chris Morgan. Pylint buscará los archivos rc, con una precedencia que los valores de los archivos "más cerca" más altamente:
-
Un archivo
pylintrc
en el directorio de trabajo actual; o -
Si el directorio de trabajo actual está en un módulo de Python (es decir, que contiene un archivo
__init__.py
), en busca de la jerarquía de módulos de Python hasta que se encuentre un archivopylintrc
; o -
El fichero indicado por la variable de entorno PYLINTRC; o
-
Si usted tiene un directorio principal que no es
/root
:-
~/.pylintrc
; o -
~/.config/pylintrc
; o -
/etc/pylintrc
-
Tenga en cuenta que la mayoría de estos archivos se denominan pylintrc
-. Sólo el archivo en ~
tiene un punto inicial
Para su archivo pylintrc
, añadir líneas a mensajes pylint desactivar específicos. Por ejemplo:
[MESSAGES CONTROL]
disable=locally-disabled
-
adicionales desables desde la línea de comandos
pylint
, como se describe por Aboo y Cairnarvon. Esto parecepylint --disable=bad-builtin
. Repita--disable
a elementos adicionales reprimir. -
adicionales desables de líneas de código Python individuales, como se describe por Imolit. Estas parecen
some statement # pylint: disable=broad-except
(comentario adicional en el extremo de la línea fuente original) y sólo se aplican a la línea actual . Mi enfoque es siempre poner estos en el final de otras líneas de código para que no se confundan con el estilo de bloque, véase más adelante. -
Otras desactiva definidos para los bloques grandes de código Python, hasta archivos de código fuente completo.
-
Estas parecen
# pragma pylint: disable=bad-whitespace
(nótese la palabra clavepragma
). -
Estos aplicará a cada línea después de el pragma. Poner un bloque de estos en la parte superior de un archivo hace que las supresiones se aplican a todo el archivo. Poner el mismo bloque inferior en el archivo hace aplican sólo a las líneas siguientes del bloque. Mi enfoque es siempre poner estos en una línea de su propia para que no se confundan con el estilo de una sola línea, véase más arriba.
-
Cuando una supresión sólo debería aplicarse en un lapso de código, el uso
# pragma pylint: enable=bad-whitespace
(ahora usandoenable
nodisable
) cese la represión.
-
Tenga en cuenta que la desactivación de una sola línea utiliza la sintaxis # pylint
mientras que la desactivación de esta línea en adelante utiliza la sintaxis # pragma pylint
. Estos son fáciles de confundir, especialmente al copiar y pegar.
Poniendo todo junto
Por lo general utilizan una combinación de estos enfoques.
-
Yo uso
~/.pylintrc
para los estándares mundiales absolutamente - muy pocos de estos .
-
Yo uso
pylintrc
a nivel de proyecto en diferentes niveles dentro de los módulos de Python cuando hay normas específicas del proyecto. Especialmente cuando usted está tomando en el código de otra persona o equipo, es posible que usan las convenciones que no se prefiere, pero no quieren volver a trabajar el código. Manteniendo los ajustes en este nivel no ayuda a difundir esas prácticas a otros proyectos. -
Yo uso el pragmas estilo de bloque en la parte superior de los archivos de origen individuales. Me gusta pasar las pragmas off (mensajes) cese la represión en pleno desarrollo incluso para los estándares pylint no estoy de acuerdo con (como "muy pocos métodos públicos" - Siempre tengo que alerta sobre las clases de excepción personalizada) - pero es útil para ver más / tal vez todos los mensajes pylint cuando se está creando.De esa manera se pueden encontrar los casos que desea tratar con pragmas de una sola línea (ver más abajo), o simplemente añadir comentarios para el siguiente desarrollador para explicar por qué la advertencia de que está bien en este caso.
-
os dejo algunos de los pragmas de estilo bloque habilitado incluso cuando el código está listo para el registro de entrada. Trato de usar algunos de ellos, pero cuando tiene sentido para el módulo, que está bien hacer como documentación. Sin embargo, yo trato de dejar tan sólo en lo posible, preferiblemente ninguno.
-
Yo uso el estilo de una sola línea a la dirección comentario errores especialmente potentes. Por ejemplo, si hay un lugar donde realmente tiene sentido hacer
except Exception as exc
, puse el# pylint: disable=broad-except
en esa línea en lugar de un enfoque más global, porque se trata de una extraña excepción y tiene que ser llamado a cabo, básicamente, como una forma de documentación.
Como todo lo demás en Python, que puede actuar a diferentes niveles de indirección. Mi consejo es pensar en lo que pertenece a qué nivel por lo que no termina con un enfoque demasiado indulgente con Pylint.
También puede utilizar el siguiente comando:
pylint --disable=C0321 test.py
Mi versión es pylint 0.25.1.
Este es un Preguntas :
4.1 ¿Es posible desactivar localmente un mensaje en particular?
Sí, esta característica se ha añadido en Pylint 0,11. Esto puede hacerse mediante la añadiendo
“#Pylint: disable = algunos-mensaje, otro uno” en el deseado nivel de bloque o al final de la línea deseada de código.
Puede desactivar los mensajes ya sea por código o por nombre simbólico. Vea la docs (o ejecutar pylint --list-msgs
en el terminal) para el pleno lista de los mensajes de pylint.
Los documentos también proporcionan un buen ejemplo de cómo utilizar este característica.
Sólo tienes que añadir una línea a desactivar lo que quiere desactivar. P.ej.
#pylint: disable = line-too-long, too-many-lines, no-name-in-module, import-error, multiple-imports, pointless-string-statement, wrong-import-order
Añadir esta en la posición # 1 en el módulo
En caso de que esto ayude a alguien, si está utilizando código de Visual Studio, se espera que el archivo esté en la codificación UTF8. Para generar el archivo, me encontré pylint --generate-rcfile | out-file -encoding utf8 .pylintrc
en PowerShell.
Python hace permiso de más de una instrucción en una línea, separados por punto y coma (;). Sin embargo, la limitación de cada línea a una declaración hace que sea más fácil para un ser humano a seguir la lógica de un programa cuando se lee a través de él.
Por lo tanto, otra forma de resolver este problema, es entender por qué el mensaje de pelusas esté allí y no poner más de una sentencia en una línea.
Sí, puede que le resulte más fácil escribir varias instrucciones por línea, sin embargo, pylint es para cualquier otro lector de su código no sólo usted.