[Python-projects] pylint: unused local variables and their context
Sylvain Thénault
sylvain.thenault at logilab.fr
Mon Dec 4 16:51:22 CET 2006
On Thursday 30 November à 20:16, Maarten ter Huurne wrote:
>
> Pierre Rouleau wrote on 2006-11-30 06:06:31 PM:
>
> > This warning does annoy me a little too, however, i'd like to see
> > what other do
> > to avoid the warning.
> > In certain situations, the warning might just be what you need to remember to
> > use the loop index.
> > So removing the warning might not be the best solution afterall.
>
> Like Duncan, we use a naming convention:
>
> The code looks like this:
>
> for x_ in range(0, MAX):
> some_code()
>
> x, y, z_ = self.getCoords()
>
> And in pylintrc we have:
>
> dummy-variables-rgx=_|([^_]+_)|dummy
>
> Now that I see it again, I noticed that it can be simplified to: ([^_]*_)|dummy
>
> > Why not write::
> >
> > x, y = self.getCoords()[:2]
> > self.checkxy(x, y)
>
> It is not clear now what the third coordinate is for; in the case of "x, y, z"
> it can be guessed, but in some contexts it is not so obvious and you'd have to
> look up the docstrings of the method to know what info is being discarded.
>
> It is not even clear that there are exactly three coordinates: maybe
> homogeneous coordinates are used and both z and w are discarded; discarding w
> may be a bug.
>
> Also, in some cases you may want to discard an element from the middle of the
> sequence ("y" in this example).
>
> > As far as I am concerned, I prefer to get a pylint warning for unused
> > variables in tuple assignment. I don't like leaving things hanging.
>
> One possible solution would be to have separate warnings for:
> - all variables assigned to are unused
> - some variables assigned to are unused, some are used
>
> However, I actually prefer the naming convention as a solution, since it makes
> the fact that a variable is unused explicit. Just disabling the messages will
> save you some false positives, but can introduce false negatives.
>
> In our project we just accepted that we have to make some modifications in our
> code to please PyLint:
> - stick to more naming conventions (unused variables ending in underscores,
> mix-in class names ending in "Mixin")
> - making all abstract methods explicit (rather than just not defining them in
> the superclass)
> - for messages which are useful in general, but not in a specific case: add "#
> pylint: disable-msg=X0123" comments
that's the expected usage. You don't mind if I cut and paste this into
pylint's documentation ?
> - for PyLint bugs: add "#pylint: disable-msg=X0123" comments
> (we trigger two bugs: one with lambda expressions I reported long ago and one
> with type inference I reported last week;
> I cannot find either of them in the bug tracker though, should I repost
lambda expression bug should be fixed in the latest release. I'll check
the inference bug you reported asap.
> them?)
> - for PyLint limitations: add "#pylint: disable-msg=X0123" comments
> (Twisted's modules create a lot of definitions dynamically so PyLint does not
> know about them)
>
> The effort is worth it, since PyLint helps us a lot in keeping the code clean
> and finding errors early. Although most errors found by PyLint would also be
> found by the regression tests, by fixing them before committing, we save time.
> And our regression tests do not cover all code either, just the most complex
> parts.
>
> To return to the original question: once you decide that you're going to write
> code with PyLint in mind, adopting a naming convention works better than
> disabling a separated message. I can imagine though that if you start using
> PyLint on a large existing code base, disabling a separated message gives you a
> way to reduce false positives a lot instantly, instead of having to refactor
> over the course of months.
I agree, however it's not worth enough for me to implement it...
--
Sylvain Thénault LOGILAB, Paris (France)
Formations Python, Zope, Plone, Debian: http://www.logilab.fr/formations
Développement logiciel sur mesure: http://www.logilab.fr/services
Python et calcul scientifique: http://www.logilab.fr/science
More information about the Python-Projects
mailing list