This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: UserDict is not iterable
Type: Stage:
Components: Library (Lib) Versions: Python 2.4
process
Status: closed Resolution: wont fix
Dependencies: Superseder:
Assigned To: Nosy List: kjohnson, rhettinger
Priority: normal Keywords:

Created on 2005-03-16 19:34 by kjohnson, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (2)
msg24663 - (view) Author: Kent Johnson (kjohnson) * Date: 2005-03-16 19:34
UserDict does not directly support iteration:

>>> import UserDict
>>> ud = UserDict.UserDict()
>>> ud['a'] = 1
>>> [k for k in ud]
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "C:\Python24\lib\UserDict.py", line 17, in
__getitem__
    def __getitem__(self, key): return self.data[key]
KeyError: 0

The fix is to define __iter__ = iterkeys:
>>> class UD(UserDict.UserDict):
...   __iter__ = UserDict.UserDict.iterkeys
...
>>> ud = UD()
>>> ud['a'] = 1
>>> [k for k in ud]
['a']
msg24664 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2005-03-16 20:24
Logged In: YES 
user_id=80475

This could not be done for reasons of backwards compatability.

To get what you want, use UserDict.IterableUserDict.
History
Date User Action Args
2022-04-11 14:56:10adminsetgithub: 41707
2005-03-16 19:34:16kjohnsoncreate