[Python-3000] Iterators for dict keys, values, and items == annoying :)

Neal Norwitz nnorwitz at gmail.com
Fri Mar 31 09:37:28 CEST 2006


On 3/30/06, Terry Reedy <tjreedy at udel.edu> wrote:
>
> "Aahz" <aahz at pythoncraft.com> wrote in message
> news:20060331012037.GA7960 at panix.com...
> > What do we want to tell people who have code like this:
> >
> > keys = d.keys()
> > keys.sort()
>
> Could a good-enough code analyzer detect such, even if separated by
> intervening lines?  If so, it could suggest sorted() as a fix.  I wonder if
> the pypy analyzer could be adapted for 2.x to 3.0 warning and upgrade
> purposes.  Or do pylint or pychecker gather enough information?

pychecker is supposed to have this info, but only if d is known to be
a dict.  It could be extended to assume any method keys() (and
friends) should return iterators.  In which case, it would say that an
iterator doesn't have a sort method.  Below is the output of the
current version.

n

### file: tt.py
def foo():
  d = {}
  keys = d.keys()
  keys.sort()
  keys.sort2()
###

$ pychecker tt.py
Processing tt...

Warnings...

tt.py:6: Object (keys) has no attribute (sort2)


More information about the Python-3000 mailing list