Dans le passé, j'ai principalement utilisé PyLint - il peut mettre en évidence lorsque vous avez utilisé une variable non définie, lorsque vous importez des choses sans les utiliser et ainsi de suite. Il peut être un peu bavard, se plaignant de choses comme des lignes de plus de 80 caractères, des variables ne correspondant pas à des regex spécifiques, des classes ayant trop peu de méthodes publiques, des méthodes manquant de docs-trings.
Par exemple, pour le script ..
import os
import somefakelib
def myfunc(x):
blah = "Something"
print os.listdir(x+blh)
pylint génère les messages suivants:
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
Ils sont toutes les plaintes valides, mais je tendance à désactiver un grand nombre de conventions et messages refactoring . Vous pouvez désactiver les messages spécifiques, que ce soit sous forme de commentaires dans votre code:
#pylint:disable-msg=R0903,C0103,R0903,F0401,C0301
..ou comme arguments de ligne de commande à la commande pylint:
pylint --disable-msg=R0903,C0103,R0903,F0401,C0301 myfile.py
Avec les messages ci-dessus désactivé, il génère les messages suivants pour le code ci-dessus:
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 génère également un "rapport de code", y compris le nombre de lignes de code/commentaires/docstring/espaces blancs le fichier a, le nombre de messages par-c ategory, et donne à votre code un "score" - 10 étant aucun message, 0 étant généralement une erreur de syntaxe
Une autre option est PyFlakes, que je trouve un peu moins verbeuse (j'ai récemment commencé à l'utiliser en place de PyLint). Encore une fois en utilisant le script ci-dessus, pyflakes donne les messages suivants:
example.py:2: 'somefakelib' imported but unused
example.py:6: undefined name 'blh'
La dernière option que j'utilise est pep8.py
, qui, comme son nom l'indique applique PEP8. C'est de loin le script le plus .. pédant, en imposant des choses comme des lignes blanches correctes avant/après les fonctions/classes, en espaçant le code, en corrigeant l'indentation à 4 espaces et ainsi de suite.
Fonctionnant sur le code ci-dessus, il produit les éléments suivants:
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
Il est applique la plupart du temps des choses stylistiques comme correct des espaces, il ne fait pas beaucoup d'analyse statique du code comme pylint ou pyflakes, je Utilisez pep8.py conjointement avec PyLint ou PyFlakes.
pep8.py
a été annoncé sur le python mailing list here, mais le lien de téléchargement dans c'est mort .. Il y a un miroir github par cburroughs, avec quelques corrections mineures à github.com/cburroughs/pep8.py, ou vous pouvez saisir la version non modifiée de an older revision
PyChecker est une autre option, bien que je ne l'utilise pas
Je viens de trouver à propos de pep8.py, mais la page ne se charge pas. Cependant, il est toujours dans le cache Google http://74.125.93.132/search?q=cache:-sI5YpbDc9MJ:svn.browsershots.org/trunk/devtools/pep8/pep8.py+pep8.py Est-ce le seul outil? ? Y a-t-il un autre meilleur? – solarc