All Unkept
Posted in: Python, Django  —  April 28, 2006 at 09:03 PM

pychecker vs pylint vs Django

by Luke Plant

I just used pychecker on Django and it helpfully found a few bugs. However, it printed a lot of warnings that were wrong, and it obviously has some bugs itself:

.../django/db/models/options.py:134: INTERNAL ERROR -- STOPPED PROCESSING FUNCTION --
        Traceback (most recent call last):
          File "/usr/lib/site-python/pychecker/warn.py", line 222, in _checkFunction
            _findUnreachableCode(code)
          File "/usr/lib/site-python/pychecker/warn.py", line 180, in _findUnreachableCode
            lastLine, lastItem, lastIndex = code.returnValues[-1]
        IndexError: list index out of range

So just how good is pychecker?

$ pychecker pychecker
Processing pychecker...

Warnings...

None

Pretty good -- according to itself! Lets try another experiment:

$ pylint pychecker
************* Module pychecker

[snip 1600 lines]

Global evaluation
-----------------
Your code has been rated at 5.65/10

5.65 out of 10 -- ha! I detect some bias in pychecker's assessment of itself! Why are we even listening to pychecker! pylint is obviously miles better - look:

$ pylint pylint
[snip 100 lines]

Global evaluation
-----------------
Your code has been rated at 9.89/10

Pretty hot! Let's try pylint on Django:

$ pylint django
************* Module django

[snip 7000 lines]

Global evaluation
-----------------
Your code has been rated at 5.19/10

Bummer. That didn't go where I wanted it to. Actually, why I am listening to what some dumb program says about Django? Who appointed pylint as the arbiter of code style: ... Line too long (208/80) ... Too many local variables (23/15) ...? Bah!

On a more serious note, I think pylint (especially pylint | egrep '^E:') has some useful output, though it still makes mistakes. At some point I intend to go through it more carefully. The problem is there is so much of it -- perhaps it would be nice to have a 'pylintdiff' type command - what errors is pylint giving that it didn't last time. I guess that would be a few lines of shell script.

Comments §

blog comments powered by Disqus