読者です 読者をやめる 読者になる 読者になる

shelveの"dbm.error: db type could not be determined"というエラー

Mac Python

MacPortで入れたPython3.2.2*1でshelve.openを使おうとして、"dbm.error: db type could not be determined"というエラーが出た。

 % python
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import shelve
>>> shelve.open("jasycache")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/shelve.py", line 232, in open
    return DbfilenameShelf(filename, flag, protocol, writeback)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/shelve.py", line 216, in __init__
    Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/dbm/__init__.py", line 83, in open
    raise error[0]("db type could not be determined")
dbm.error: db type could not be determined

これは、下記のURLの回答にある通り、gdbm 1.9以降がインストールされている環境で起こるPythonのバグらしい。

PythonのBTSには既に上がっており、修正もされているので、次のリリース(3.2.3)では修正されるだろう。

それを待てない場合は、修正箇所はdbm/__init__.pyの一行だけなので、手動で以下のpatchをあてれば直る。

*1:2.7や3.1でもおこるらしい