bsddb.db.DBInvalidArgError:(22,'无效的参数-/dbs/supermodels.db:意外的文件类型或格式')
此错误是由于BDB版本不兼容(1.85或3+)导致的吗?如果是,我如何检查版本,排除故障并解决此错误?
最佳答案
是的,这当然可能是由于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
命令确定db的类型,例如$ 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
实用程序。关于python - 读取BDB时出现BDB Python接口(interface)错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1336617/