我正在使用Pycharm。首先,每当在Pycharm中导入任何模块时。完整的导入行逐渐淡出。但是在import shelve不会消失的情况下。另外,当我运行文件时,出现以下错误:

Traceback (most recent call last):
  File "/Users/abhimanyuaryan/PycharmProjects/shelve/main.py", line 13, in <module>
    s = shelve.open("file.dat")
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/shelve.py", line 239, in open
    return DbfilenameShelf(filename, flag, protocol, writeback)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/shelve.py", line 223, in __init__
    Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/dbm/__init__.py", line 88, in open
    raise error[0]("db type could not be determined")
 dbm.error: db type could not be determined

这是我的代码:
import shelve

s = shelve.open("file.dat")

s["first"] = (1182, 234, 632, 4560)
s["second"] = {"404": "file is not present", "googling": "Google to search your content"}
s[3] = ["abhilasha", "jyoti", "nirmal"]

s.sync()

print(s["first"])
print(s["second"])
print(s[3])

最佳答案

OP在一条评论中解释说'file.dat'是由pickle创建的-这就是问题所在! pickle 使用任何数据库格式-它使用自己的格式!首先使用file.dat创建shelve(即,当shelve不存在时运行file.dat并将其保存到其中),您会没事的。

OP在评论中:“在这种情况下,我仍然不明白问题出在哪里”。答:问题在于pickle而不是创建shelve可以使用的任何DB格式的文件。使用单个模块进行序列化和反序列化-要么只是pickle,要么就是shelve,它将工作得更好:-)。

关于python - 搁置:无法确定数据库类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28132751/

10-12 16:59