Basic anydbm example generates 'AttributeError: iteritems'
I'm attempting a pretty cut & dry example of anydbm:
#!/usr/bin/python
import anydbm
# Open database, creating it if necessary.
db = anydbm.open('cache', 'c')
# Record some values
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 开发者_高级运维'Cable News Network'
for k, v in db.iteritems():
print k, '\t', v
Yet, on my machine (OS X 10.5.8, Python 2.5.1), I get the following error:
Traceback (most recent call last): File "./foo.py", line 12, in for k, v in db.iteritems(): AttributeError: iteritems
Any suggestions?
It appears the Apple-supplied Pythons are not built with any third-party database libraries so anydbm
results in the use of the default portable dumbdbm
implementation which lacks an iteritems
method.
$ /usr/bin/python2.5
Python 2.5.4 (r254:67916, Feb 11 2010, 00:50:55)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import anydbm
>>> db = anydbm.open('cache', 'c')
>>> dir(db)
['close', 'get', 'has_key', 'keys', 'setdefault']
The python.org OS X Pythons, on the other hand, are built with a real dbm interface:
$ /usr/local/bin/python2.5
Python 2.5.4 (r254:67917, Dec 23 2008, 14:57:27)
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import anydbm
>>> db = anydbm.open('cache2', 'c')
>>> dir(db)
['__cmp__', '__contains__', '__del__', '__delitem__', '__doc__', '__getitem__', '__init__', '__iter__', '__len__', '__module__', '__repr__', '__setitem__', '_checkCursor', '_checkOpen', '_closeCursors', '_cursor_refs', '_gen_cref_cleaner', '_make_iter_cursor', 'clear', 'close', 'db', 'dbc', 'first', 'get', 'has_key', 'isOpen', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'last', 'next', 'pop', 'popitem', 'previous', 'saved_dbc_key', 'set_location', 'setdefault', 'sync', 'update', 'values']
>>> db.iteritems()
<generator object at 0x481760>
>>> db.__module__
'bsddb'
There are some open issues on the Python bug tracker concerning some of the dbm modules inconsistencies.
精彩评论