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

Adam DePrince adam.deprince at gmail.com
Sat Apr 1 04:52:34 CEST 2006


On Thu, 2006-03-30 at 23:37 -0800, Neal Norwitz wrote:
> 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.

With the views that we were talking about before, with d.keys() all you
have is the view, neither an iter nor list have been instantiated.  

I'd almost say that 

keys = d.keys()
foo = keys.sort() 

could fit quite well into the view framework.

> 
> 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)
> _______________________________________________
> Python-3000 mailing list
> Python-3000 at python.org
> http://mail.python.org/mailman/listinfo/python-3000
> Unsubscribe: http://mail.python.org/mailman/options/python-3000/adam.deprince%40gmail.com



More information about the Python-3000 mailing list