gpt4 book ai didi

python - python 中的搁置模块不起作用 : "db type cannot be determined"

转载 作者:太空狗 更新时间:2023-10-30 00:03:19 28 4
gpt4 key购买 nike

我正在尝试用 Python 编写一个简单的密码存储程序,它看起来很简单,所以我想知道我是否使用了 shelve 错误。

我有主要的 .py 文件:

import shelve

passwords = shelve.open('./passwords_dict.py')

choice = raw_input("Add password (a) or choose site (c)?")

if choice[0] == 'a':
site_key = raw_input("Add for which site? ").lower()
userpass = raw_input("Add any info such as username, email, or passwords: ")

passwords[site_key] = userpass

else:
site = raw_input("Which site? ").lower()
if site in passwords:
print "Info for " + site + ": " + passwords[site]
else:
print site, "doesn't seem to exist!"

print "Done!"

passwords.close()

另一个文件 passwords_dict.py 只是一个空字典。

但是当我尝试运行该程序时,出现了这个错误:

Traceback (most recent call last):
File "passwords.py", line 3, in <module>
passwords = shelve.open('passwords_dict.py')
File "/usr/lib/python2.7/shelve.py", line 239, in open
return DbfilenameShelf(filename, flag, protocol, writeback)
File "/usr/lib/python2.7/shelve.py", line 223, in __init__
Shelf.__init__(self, anydbm.open(filename, flag), protocol, writeback)
File "/usr/lib/python2.7/anydbm.py", line 82, in open
raise error, "db type could not be determined"
anydbm.error: db type could not be determined

当我尝试改用 anydbm 时,出现此错误:

Traceback (most recent call last):
File "passwords.py", line 3, in <module>
passwords = anydbm.open('passwords_dict.py')
File "/usr/lib/python2.7/anydbm.py", line 82, in open
raise error, "db type could not be determined"
anydbm.error: db type could not be determined

当我尝试改用 dbm 时,出现此错误:

Traceback (most recent call last):
File "passwords.py", line 3, in <module>
passwords = dbm.open('./passwords_dict.py')
dbm.error: (2, 'No such file or directory')

我做错了什么?是否有另一种方法来存储字典并仍然能够使用用户输入提取键(而不是整个字典,我想 pickle 就是这样做的)?

最佳答案

我认为您误解了 shelve 模块的工作原理。它打开一个数据库文件。当您尝试打开包含 Python 脚本的现有文件时,它会尝试检测该文件包含的数据库类型(因为 shelve 支持多个后端数据库)。

我认为你想要这样的东西:

import os
import shelve

curdir = os.path.dirname(__file__)
passwords = shelve.open(os.path.join(curdir, 'password_db'))

这将在与您的脚本相同的目录中创建一个名为 password_db.<db> 的新文件其中 <db>是特定于实现的数据库文件扩展名。

关于python - python 中的搁置模块不起作用 : "db type cannot be determined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16704932/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com