1

我只是尝试使用 bsddb 在 Python 中调用 open 但遇到以下错误。任何想法?如果没有,有没有办法获得更详细的调试错误消息,获取更多信息可能有助于我进一步调查。没有太多细节的错误代码当然没有多大帮助。

DBInvalidArgError: (22, '无效参数')

资源:

import bsddb, bsddb.db

...
try:
    e = bsddb.db.DBEnv()
    e.open('/mydir', bsddb.db.DB_CREATE | bsddb.db.DB_INIT_MPOOL)
...

附加信息:在 /mydir 我有一个 DB_CONFIG 文件:

set_data_dir /mydir/current_data
# 128MB
set_cachesize 0 134217728 1

更新: 我想我在这里做了一些事情,因为它与 bsddb 和 bsddb.db 版本有关:

> $python
> Python 2.5...
> import bsddb, bsddb.db
> print bsddb.__version__, bsddb.db.version()
> 4.4.5 (4, 2, 52)
> bsddb.db.DBEnv().open('/mydir/')
> bsddb.db.DBInvalidArgError: (22, 'Invalid argument')

> $python2.6
> Python 2.6.6...
> import bsddb, bsddb.db
> print bsddb.__version__, bsddb.db.version()
> 4.7.3 (4, 7, 25)
> bsddb.db.DBEnv().open('/mydir/')
> 

如果我用 python2.6 运行它没有错误。

4

1 回答 1

0

是的,BerkeleyDB 曾经在版本不匹配时返回 EINVAL。

最近(如过去 5 年以上)BerkeleyDB 改为返回 DB_VERSION_MISMATCH。

于 2015-01-09T18:00:04.463 回答