W przeszłości korzystałem głównie z PyLint - można wyróżnić, gdy użyto niezdefiniowanej zmiennej, podczas importowania rzeczy bez ich używania itd.
Może to być trochę gadatliwe, narzekając na takie rzeczy, jak linie o długości ponad 80 znaków, zmienne nie pasujące do konkretnych regexów, klasy mające zbyt mało publicznych metod, metody, których brakuje w dokumentach.
Na przykład dla skryptu ..
import os
import somefakelib
def myfunc(x):
blah = "Something"
print os.listdir(x+blh)
pylint generuje następujące komunikaty:
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
wszystkie są ważne skarg, ale staram się wyłączyć wiele komunikatów konferencyjnych i refaktoryzacji . Można wyłączyć konkretne wiadomości, albo jako komentarze w kodzie:
#pylint:disable-msg=R0903,C0103,R0903,F0401,C0301
..or jako argumenty wiersza polecenia do polecenia pylint:
pylint --disable-msg=R0903,C0103,R0903,F0401,C0301 myfile.py
Z powyższych komunikatów wyłączony, generuje następujące komunikaty dla powyższego kodu:
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 generuje również raport „kod”, w tym jak wiele linii kodu/komentarze/docstring/spacji plik, liczby wiadomości per-c ategory i daje swojemu kodowi "wynik" - 10 oznacza brak wiadomości, 0 ogólnie jest to błąd składni
Inną opcją jest PyFlakes, które uważam za nieco mniej przesadne (ostatnio zacząłem używać go w miejscu PyLint). Ponownie stosując powyższy scenariusz, PyFlakes daje następujące komunikaty:
example.py:2: 'somefakelib' imported but unused
example.py:6: undefined name 'blh'
Ostatnią opcją używam to pep8.py
, który jak sama nazwa wskazuje wymusza PEP8. Jest to zdecydowanie najbardziej ... pedantyczny skrypt, wymuszający rzeczy takie jak poprawne puste linie przed/po funkcjach/klasach, odstępy wokół kodu, prawidłowe wcięcie 4-spacji itd.
bieganie na powyższym kodzie produkuje następujące:
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
Jest przeważnie wymusza stylistyczne rzeczy jak poprawnej spacją, to nie robi dużo statyczną analizę kodu podobnego pylint lub PyFlakes, więc użyj pep8.py w połączeniu z PyLint lub PyFlakes.
pep8.py
pierwotnie ogłoszono na python mailing list here, ale link do pobrania w tym jest teraz martwy .. Jest lustro github przez cburroughs, z kilkoma niewielkimi poprawkami w github.com/cburroughs/pep8.py, lub można pobrać w wersji niezmodyfikowanej od an older revision
PyChecker to inna opcja, chociaż nie używałem tego
Właśnie znalazłem o pep8.py, ale strona się nie ładuje. Jednak nadal znajduje się w pamięci podręcznej Google http://74.125.93.132/search?q=cache:-sI5YpbDc9MJ:svn.browsershots.org/trunk/devtools/pep8/pep8.py+pep8.py Czy to jedyne narzędzie ? czy są jakieś inne lepsze? – solarc