Oui, cela peut certainement être dû à des versions plus anciennes du fichier db, mais il serait utile si vous avez publié le code qui a généré cette exception et la traceback complète. En l'absence de cela, êtes-vous sûr que le fichier de base de données que vous ouvrez est du bon type? Par exemple, en essayant d'ouvrir un fichier btree comme si elle est un hachage soulève l'exception que vous voyez:
>>> import bsddb
>>> bt = bsddb.btopen('bt')
>>> bt.close()
>>> bsddb.hashopen('bt')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/bsddb/__init__.py", line 298, in hashopen
d.open(file, db.DB_HASH, flags, mode)
bsddb.db.DBInvalidArgError: (22, 'Invalid argument -- ./bt: unexpected file type or format')
En * nix vous pouvez généralement déterminer le type de db en utilisant la commande file
, par exemple
$ file /etc/aliases.db cert8.db
/etc/aliases.db: Berkeley DB (Hash, version 8, native byte-order)
cert8.db: Berkeley DB 1.85 (Hash, version 2, native byte-order)
Ouverture d'un fichier 1,85 version échoue avec la même exception:
>>> db = bsddb.hashopen('/etc/aliases.db') # works, but...
>>> db = bsddb.hashopen('cert8.db')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/bsddb/__init__.py", line 298, in hashopen
d.open(file, db.DB_HASH, flags, mode)
bsddb.db.DBInvalidArgError: (22, 'Invalid argument -- ./cert8.db: unexpected file type or format')
Si vous devez migrer les fichiers de base de données, vous devriez regarder les services publics db_dump
, db_dump185
et db_load
qui viennent avec le BdB distribution.
Il serait utile si vous pouviez ajouter du code qui montre le contexte de cette erreur. – Shirkrin