开发者

Basic anydbm example generates 'AttributeError: iteritems'

开发者 https://www.devze.com 2022-12-27 15:51 出处:网络
I\'m attempting a pretty cut & dry example of anydbm: #!/usr/bin/python import anydbm # Open database, creating it if necessary.

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号