Issue532747
Created on 2002-03-20.21:42:43 by bgrus, last changed 2002-05-30.19:37:05 by bckfnn.
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2002-03-20 21:42:43 | bgrus | create | |
Created on 2002-03-20.21:42:43 by bgrus, last changed 2002-05-30.19:37:05 by bckfnn.
| Messages | |||
|---|---|---|---|
| msg627 (view) | Author: Boris Gruschke (bgrus) | Date: 2002-03-20.21:42:43 | |
When using the iterator implementation from the CVS
(which works very well btw.) I came along the
following problem:
-- snip --
d = {1:2,3:4}
l = []
for i in iter(d): l.append(i)
-- snip --
throws "TypeError: iteration over non-sequence"
iter(d) creates a PyDictionaryIter; the for-Loop
invokes __iter__() on that which hits
PyObject.__iter__() and results in the TypeError.
I think the solution is pretty straigtforward:
a) __builtin__.iter(obj) checks whether obj is an
iterator before calling obj.__iter__()
or
b) the iterator classes implement __iter__()
returning themselves (or maybe a clone)
If it is in question whether the code above should
work at all: It's an excerpt of test_descr.py from
the Python 2.2 test suite.
|
|||
| msg628 (view) | Author: Finn Bock (bckfnn) | Date: 2002-05-30.19:33:37 | |
Logged In: YES user_id=4201 Added as test360.py The answer is 'b'. From the pep234: """A class that wants to be an iterator also ought to implement __iter__() returning itself.""" |
|||
| msg629 (view) | Author: Finn Bock (bckfnn) | Date: 2002-05-30.19:37:05 | |
Logged In: YES user_id=4201 Fixed in PyDictionary.java: 2.19; PyStringMap.java: 2.14; |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2002-03-20 21:42:43 | bgrus | create | |
Supported by Python Software Foundation,
Powered by Roundup