PyLint results?

André Malo auch-ich-m at g-kein-spam.com
Fri Apr 21 15:26:48 EDT 2006


* Michael Yanowitz wrote:

>    I ran the new pylint and my code and I had a few questions on why those
> are warnings or what I can do to fix them:
> 
> 1) W:  0: Too many lines in module (1587)
>      Why is 1587 considered too many lines? Would there be necessarily be
>      an
>    advantage to split it up into 2 or 3 files? Can I up the limit?

not necessarily. It might be considered bad style to put too much stuff into
one module. This depends on the content. You can now raise the limit (which
is 1000 lines by default) with the --max-module-lines command line option
or using a config file (generate one with pylint --generate-rcfile, use it
with pylint --rcfile=<filename>).

Alternatively you can disable the message for this module by putting
# pylint: disable-msg = W<id>
on the top (after the # -*- coding -*- line, if any).
The new pylint allows for local disabling also such comments within the
code.

The id can you get if you enable them in the output via cmdline or config
file.

> 2) C:  0: Missing required attribute "__revision__"
>    What is this? Is that for CVS? I don't use CVS (we use SVN). I have not
>    seen any sample code which includes this tag yet. But if I include
>    __revision 1.0  somewhere in the code it will remove that warning?

yeah. But you can list these attributes in the config... ;-)

> 3) W:230:readDiscreteData: Using the global statement
>    What is wrong with using the global statement? I know the use of
>    Globals should be discouraged, but often they can't be avoided.
>    Suppose I have a constant. In C or C++, I could just use a #define and
>    it would be known throughout the whole file. In Python, there isn't a
>    similar construct, so rather than creating a large parameter list, of
>    constants, I like to use globals.

Consider *writing* globals from inside a function as bad style.

> 4) W:261:getDiscreteData: Catch "Exception"
>    What is wrong with that?

Typically you do want be more specific, because Exception catches too much.

> 5) R:547:readDiscreteData: Too many branches (28/12)
>    Python doesn't have the switch/case statements that C/C++ have. So I
>    could have a large block if/elif/else statements.
>    Is there any way to avoid that?

Not always. But usually you can restructure your code better (Use more
functions/methods, structure them semantically).

> 6) R:722:waitDiscretes: Too many local variables (38/15)
>    That's new to me. What is wrong with too many local variables?
>    Can anything be done to improve that besides having too many globals?

One could loose the overview, I guess. 38 local variables are really a lot.
Structure your code :)

> 7) W:933:sendStringToSocket: Redefining name 'nPortNumber' from outer
> scope (line
>    What is wrong with using the same variable name in a function that is
> used by its caller?

It might confuse someone else or you in half a year when reading the code
again.

> 8) W:995:sendStringToSocket: Used builtin function 'map'
>    Is that a problem?

Not really. You might consider using list comprehensions, though.

>   Plus many other warnings about my naming convention or unused variables
> which I will ignore
> at this time.
> 
>   I did find it to be a very useful too any how in cleaning up my code.
> I raised my code rate from about -8 to about +7.

I personally find the code rate nonsense, YMMV ;-)

Note that all messages from pylint should be taken as hints, not a final
verdict. Think about them (you did, as you asked here ;-). Either correct
or ignore them (typically done by locally or even globally disabling them).

Do some fine-tuning using a config matching your own requirements. The
defaults are, well, just defaults.

nd
-- 
die (eval q-qq[Just Another Perl Hacker
]
;-)
# André Malo, <http://pub.perlig.de/> #



More information about the Python-list mailing list