En el pasado he utilizado principalmente PyLint - se puede resaltar cuando se usa una variable indefinida, cuando se importan cosas sin usarlas, etc.
Puede ser un poco detallado, quejándose de cosas como líneas de más de 80 caracteres, variables que no coinciden con expresiones específicas, clases que tienen muy pocos métodos públicos, métodos que faltan documentos-trings.
Por ejemplo, para el script ..
import os
import somefakelib
def myfunc(x):
blah = "Something"
print os.listdir(x+blh)
pylint genera los siguientes mensajes:
C: 1: Missing docstring
F: 2: Unable to import 'somefakelib' (No module named somefakelib)
C: 4:myfunc: Missing docstring
C: 4:myfunc: Invalid name "x" (should match [a-z_][a-z0-9_]{2,30}$)
C: 4:myfunc: Invalid name "x" (should match [a-z_][a-z0-9_]{2,30}$)
E: 6:myfunc: Undefined variable 'blh'
W: 5:myfunc: Unused variable 'blah'
W: 2: Unused import somefakelib
Son todas las quejas válidas, pero tienden a desactivar muchos de los mensajes de convenciones y refactorización . Puede desactivar los mensajes específicos, ya sea como comentarios en el código:
#pylint:disable-msg=R0903,C0103,R0903,F0401,C0301
..o como argumentos de línea de comandos en la pylint:
pylint --disable-msg=R0903,C0103,R0903,F0401,C0301 myfile.py
Con los mensajes anteriores desactivadas, genera los siguientes mensajes para el código anterior:
C: 1: Missing docstring
C: 4:myfunc: Missing docstring
E: 6:myfunc: Undefined variable 'blh'
W: 5:myfunc: Unused variable 'blah'
W: 2: Unused import somefakelib
pylint también genera un "informe de códigos", incluyendo el número de líneas de código/comentarios/docstring/espacio en blanco el archivo tiene, número de mensajes por-c una categoría, y le da a su código un "puntaje" - 10 no es ningún mensaje, 0 generalmente es un error de sintaxis
Otra opción es PyFlakes, que me parece un poco menos excesivamente prolija (recientemente comencé a usarlo en su lugar de PyLint). De nuevo usando la secuencia de comandos, pyflakes da los siguientes mensajes:
example.py:2: 'somefakelib' imported but unused
example.py:6: undefined name 'blh'
La última opción que utilizo es pep8.py
, que como su nombre indica hace cumplir PEP8. Es, con mucho, la escritura más pedante, que impone cosas como las líneas en blanco correctas antes/después de las funciones/clases, el espaciado del código, la correcta sangría de 4 espacios, etc.
se ejecutan en el código anterior, se produce lo siguiente:
example.py:4:1: E302 expected 2 blank lines, found 1
example.py:6:23: E201 whitespace after '('
example.py:6:32: W292 no newline at end of file
En su mayoría se impone cosas estilísticas como espacios en blanco correcto, no hace mucho a la electricidad estática análisis del código como pylint o pyflakes, por lo que usa pep8.py junto con PyLint o PyFlakes.
pep8.py
se anunció originalmente en el python mailing list here, pero el enlace de descarga en este ahora está muerto .. Hay un espejo GitHub por cburroughs, con algunas correcciones menores en github.com/cburroughs/pep8.py, o se puede agarrar la versión sin modificar del an older revision
PyChecker es otra opción, aunque no lo he usado
Acabo de encontrar pep8.py, pero la página no se carga. Sin embargo, todavía está en el caché de Google http://74.125.93.132/search?q=cache:-sI5YpbDc9MJ:svn.browsershots.org/trunk/devtools/pep8/pep8.py+pep8.py Es la única herramienta ? ¿Hay algún otro mejor? – solarc