bsddb.db.DBInvalidArgError:(22,'无效参数 - /dbs/supermodels.db:意外文件类型或格式')
此错误是由不兼容的BDB版本(1.85或3+)造成的吗?如果是这样,我如何检查版本,故障排除并解决此错误?
答案 0 :(得分:1)
是的,这当然可能是由于旧版本的db文件,但如果您发布了生成此异常的代码和完整的回溯,这将有所帮助。
如果没有这个,您确定要打开的数据库文件的类型是否正确?例如,尝试打开btree文件就像它是一个哈希引发了你看到的异常:
>>> 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')
在* nix中,您通常可以使用file
命令确定数据库的类型,例如
$ 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)
打开1.85版本文件失败,但出现相同的异常:
>>> 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')
如果您需要迁移数据库文件,则应查看bdb分发附带的db_dump
,db_dump185
和db_load
实用程序。