Pychecker

Matt Good matt.good at gmail.com
Fri Jun 9 14:46:59 EDT 2006


Anthony Greene wrote:
> Howdy, I had the impression that pychecker caught and reported such
> dynamic syntactical errors.
>
> #!/usr/bin/env python
>
>
> def add(i):
>     i += 10
>
> status = 3
>
> if 1 == 1:
>     statuss = 15
>
> add(status)
>
> =======================
>
> exalted sysfault$ pychecker foo.py
> Processing foo...
>
> Warnings...
>
> None
>
> =======================
>
> Hence the mispelling of status (statuss), which was done purposely to test
> if pychecker will acknowledge and report the error. Do i need to enable
> some type of pychecker option in order for it to pick up the error? I know
> that it is syntactically correct in python, however it's likely that
> 'status' is meant. Am i wishing that pychecker will replace a statically
> typed language mechanism?

That's a functional error, not a syntactical one.  Analyzing the
spelling of variables for similarity would lead to a lot of incorrect
warnings since pychecker has no way to tell this apart from intentional
similar spellings such as:

values = [1, 2, 3]
value = values[0]

However, when the misspelling is made inside a local scope, rather than
at the module level a warning is reported "test.py:8: Local variable
(statuss) not used":

def add(i):
    i += 10

def test():
    status = 3
    if 1 == 1:
        statuss = 15
    add(status)


This is why tools like pychecker (or pyflakes, pylint, or even a static
code compiler) aren't a substitute for unit tests.  They can definitely
help catch common mistakes, but they can't ensure your code does what
you intended.

--
Matt Good




More information about the Python-list mailing list