私はPythonの組み込みのshelveモジュールを使用して、いくつかの単純な辞書を管理しています。私が抱えている問題は、使用したいのですwith shelve.open(filename) as f:
が、試してみると、DbfilenameShelfには属性がないと主張しています__exit__
。
したがって、これを行う最も簡単な方法は、別のクラスでラップし、__exit__
そのラッパーに関数を追加することだと思います。私はこれを試しました:
class Wrapper(shelve.DbfilenameShelf):
def __exit__(self):
self.close()
def __init__(self, filename, writeback=False):
shelve.DbfilenameShelf.__init__(self, filename, flag='c', protocol=None, writeback=False)
しかし、そのようにラッパーをインスタンス化しようとするwrapped = Wrapper(filename)
と、無効な引数を指定していることがわかります。
要求に応じたエラー:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 5, in __init__
File "C:\Python27\Lib\shelve.py", line 223, in __init__
Shelf.__init__(self, anydbm.open(filename, flag), protocol, writeback)
File "C:\Python27\Lib\anydbm.py", line 85, in open
return mod.open(file, flag, mode)
File "C:\Python27\Lib\dbhash.py", line 18, in open
return bsddb.hashopen(file, flag, mode)
File "C:\Python27\Lib\bsddb\__init__.py", line 364, in hashopen
d.open(file, db.DB_HASH, flags, mode)
DBInvalidArgError: (22, 'Invalid argument')