Базовый пример anydbm генерирует 'AttributeError: iteritems' - PullRequest
0 голосов
/ 16 апреля 2010

Я пытаюсь сделать хороший пример 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

Тем не менее, на моей машине (OS X 10.5.8, Python 2.5.1) я получаю следующую ошибку:

Traceback (последний вызов был последним): Файл "./foo.py", строка 12, в для k, v в db.iteritems (): AttributeError: iteritems

Есть предложения?

1 Ответ

3 голосов
/ 16 апреля 2010

Похоже, что поставляемые Apple питоны не созданы ни с какими сторонними библиотеками баз данных, поэтому anydbm приводит к использованию переносимой реализации dumbdbm по умолчанию, в которой отсутствует метод iteritems.

$ /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']

Python.org OS X Питоны, с другой стороны, построены с реальным интерфейсом dbm:

$ /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'

В системе отслеживания ошибок Python имеется ряд открытых проблем *1011*, касающихся некоторых несоответствий модулей dbm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...