Cómo usar Pylint para estandarizar el estilo de codificación de Python
Un ejemplo específico del uso de Pylint para analizar código Python
El siguiente es un fragmento de código Python dw.py, que lee algunos valores de un archivo xml y los muestra:
Lista 3. ¿Importación de código fuente?cadena #! import?xml.dom.minidom? xmlDom=xml.dom.minidom.parse("identity.xml")? organización=xmlDom.getElementsByTagName('DW')? ?productos:?
imprimir?'ID:?' ?+?product.getAttribute('id')?
imprimir ??+?product.getAttribute('nombre') ?
Imprimir ?'Número de palabras:?' ??+?product.getAttribute('count')
Lista 4. ¿Contenido de identidad de .xml
< /DW>?
El resultado de usar Pylint en este momento (copiado de la salida formateada en html) es:
Listado 5. Resultados del análisis de Pylint************?Módulo?dw? C:1:¿Falta?docstring?/p> C:5:¿Operador?no?precedido?por?un?espacio?xmlDom =xml .dom.minidom.parse("identity.xml")?^? C:5:¿No válido?"xmlDom"?(¿debería coincidir?((([A-Z_][A-Z0-9_]*) |( __. *__))$)? C:6:¿Inválido?"Organización"? (¿debería coincidir?(([A-Z_][A-Z0-9_]*)|(__. *__)) $) ?*__))$)
La parte del informe se omite
La primera parte del resultado es el análisis del código fuente y la segunda parte es el informe. Hay tanta información en el resultado, ¿por dónde empezar a analizarla? Comience analizando el código siguiendo los siguientes pasos:
1. Dado que el resultado es demasiado largo, no puede permitir que genere primero la parte del informe, sino comenzar desde la parte de análisis del código fuente para encontrar los problemas en el código. Utilice la opción "?--reports=n".
2. Utilice la opción ?" --reports=n".--include-ids=y". Puede obtener el ID de cada mensaje en la sección de análisis del código fuente.
Lista 6. Los resultados del uso de pylint --reports=n --include-ids=y dw.py
*************** ***** ?Módulo? dw?
C0111:?1:?¿Desaparecido? cadena de documentos?
C0322:?5:?¿No hay espacio delante del operador? xmlDom=xml.dom.minidom.parse("identity.xml")?^?
C0103:?5:?¿Inválido?"xmlDom"?(¿debería?coincidir?((([A-Z_ ][A-Z0-9_]*)|(__. *__))$)?
C0103:?6:?¿Organización no válida? (¿debe?coincidir?((([A) -Z_][A-Z0-9_]*)|(__. *__))$)
Hay una identificación antes de cada mensaje. Si no comprende el significado del mensaje, puede hacerlo. puede usar ?pylint --help-msg=id Ver
Listado 7. Resultados del uso de pylint --help-msg= C0111
C0111: *Cuando un módulo, función, la clase o método no tiene cadena de documentación Cuando se usa. Algunos métodos especiales, como __init__, no requieren cadena de documentación
3. Comience a analizar los problemas en cada código fuente. De lo anterior, podemos saber que el primero. uno. La causa del problema es la falta de cadena de documentación. Agregue cadena de documentación al código. El código modificado es el siguiente:
Lista 8. Agregar cadena de documentación Código fuente modificado #! python?
""Este script analiza el contenido del archivo xml"" import?xml.dom.minidom? xmlDom=xml.dom.minidom. .getElementsByTagName('DW') ?
productos?=?org.getElementsByTagName('linux')?
para?producto?en?productos:?
imprimir?'ID:?' ?+?product.getAttribute('id')?
imprimir??+?product.getAttribute('nombre')?
Imprimir ?'Número de palabras:?' ??+?product.getAttribute('count')
Vuelva a ejecutar ?pylint --reports=n --include-ids=y dw.py, los resultados son de la siguiente manera:
Lista 9. Resultados de la operación
****************** Módulo dw C0322:?7:?Operador? no?precedido?por?a?espacio?xmlDom=xml.dom. minidom.parse("identity.xml")? C0103:?7:?¿No válido?"xmlDom"?(¿debería coincidir?((([? A-Z_][A-Z0-9_]*)|(__ . *__))$ C0103:?8:?¿Inválido?"Organización"? (¿debería?coincidir?((([A-Z_][A-Z0-9_]*)|(__. *__))$)? C0103:?8:?¿Nombre?no válido?"Organización"?*__) )$)
Puedes ver que el primer problema en el código fuente ha sido resuelto.
4. Con respecto al segundo problema C0322, los resultados del análisis aquí se explican más claramente, es decir, no hay espacios en ambos lados del operador de signo igual en la séptima línea del código. Agreguemos un espacio aquí y volvamos a ejecutar pylint --reports=n --include-ids=y dw.py, y el resultado será:
10 aparece en la lista. Resultados de la ejecución
****************** Módulo dw
C0103: ?7: Nombre no válido "xmlDom" (debe coincidir con ( ([A-Z_ ][A-Z0-9_]*)|(__. *__))$)
C0103: ?8: Nombre "organizaciones" no válido (debe coincidir (([A- Z_][A- Z0-9_]*)|(__. *__))$)
5. Puede ver que el problema ahora solo ocurre en C0103. pylint define una serie de convenciones de nomenclatura para variables, funciones, clases, etc. De hecho, no necesariamente necesitamos usar estas convenciones. En la práctica, no necesariamente tenemos que usar estas convenciones de nomenclatura, pero podemos definir las nuestras propias usando expresiones regulares, por ejemplo usando la opción ?--const-rgx='[a-z_][a-z0-9_] {2,30}$', cambiaremos la variable ?xmlDom a ?xmldom, el código es el siguiente:
Lista 11. El código fuente después de cambiar la variable xmlDom a xmldom
#! /usr/bin/env python
"""Este script analiza el contenido de un archivo xml""import?xml.dom.minidom? xmldom?=?xml.dom.minidom.parse("" identidad.xml")? organización=?xmldom.getElementsByTagName('DW')? ¿para?
productos?=?org.getElementsByTagName('linux')?
para?producto ?en?productos:?
imprimir?'ID:?' ?+?product.getAttribute('id')?
Imprimir ?'Nombre:?' product.getAttribute('nombre')?
Imprimir?'Número de palabras:??+?product.getAttribute('count')
Ejecutar?pylint --reports =n --include-ids=y--const-rgx='[a-z_][a-z0-9_]{2,30}$' dw.py, el resultado no es un problema.
6. Si desea que todos los miembros de un equipo utilicen estas reglas unificadas para estandarizar el estilo de codificación del departamento. Por ejemplo, si todo el mundo usa ?--const-rgx='[a-z_][a-z0-9_]{2,30}$' como convención de nomenclatura, entonces una forma más conveniente es utilizar un archivo de configuración.
Utilice pylint --generate-rcfile > pylint.conf para generar un archivo de configuración de muestra y luego edite la opción --const-rgx. Alternativamente, puede usar directamente pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' --generate-rcfile > pylint.conf para generar un ejemplo de archivo de configuración, y luego Editar? --const-rgx opción, ahora use ?' [a-z_][a-z0-9_]{2,30}$' directamente.
Especifique el archivo de configuración cuando ejecute Pylint en el futuro: pylint --rcfile=pylint.conf dw.py
De esta manera, Pylint especificará los parámetros de acuerdo con las opciones en el archivo de configuración?pylint.conf. Dentro de un departamento, todos pueden trabajar en los mismos archivos de configuración, manteniendo así la coherencia en el estilo de codificación.
7. Si agrega una sección de informe, es decir, no usa ?--reports=n, podrá ver el contenido de la sección de informe. 8.