我安装了Python 3.7.3,无论使用哪个版本,我都无法正确运行该模块。这是我最新的错误消息。我这个问题已经出现了好几个星期了,甚至我的老师都没有理解这个错误。
Traceback (most recent call last):
File "C:\Users\wimme\AppData\Local\Programs\Python\Python37\lib\shelve.py", line 243, in open
return DbfilenameShelf(filename, flag, protocol, writeback)
File "C:\Users\wimme\AppData\Local\Programs\Python\Python37\lib\shelve.py", line 227, in __init__
Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
File "C:\Users\wimme\AppData\Local\Programs\Python\Python37\lib\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
import pickle
scores_file = shelve.open('scores.txt', 'c')
name = input('Input student name (-999 to quit):')
while name != '-999':
if (name in scores_file):
print('This name has already been entered')
else:
score = eval(input('Input student score:'))
scores_file[name]=score
print()
name = input('Input student name (-999 to quit):')
print(scores_file)
scores_file.sync()
want_name = input("Do you want to search for a student score? (yes or no)")
while want_name == 'yes':
#print(scores_file.keys())
print(list(scores_file.keys()))
search_name = input("Which student's score would you like to know?")
print(search_name in scores_file)
if search_name in scores_file:
print(search_name , "scored a" , scores_file[search_name])
else:
print("This student's score is not in this list")
want_name = input("Do you want to search for another student score? (yes or no)")
scores_file.close()
答案 0 :(得分:0)
这是python库问题,而不是IDE问题。
回溯丢失了发生错误的代码行。请阅读https://stackoverflow.com/help/minimal-reproducible-example。如果以下答案不正确,则在将来,请删除多余的碎片。我怀疑只需要import shelve
和shelve.open
。
在具有相同参数的Win 10机器上,两者均可正常运行,创建一个DbfilenameShelf对象。对我来说,scores.txt以前不存在。我相信它一定适合您。
从第88行开始读取dbm.py,dbm.whichdb(file)必须返回''。反过来,这意味着whichdb代码中的所有检查(以返回其他内容)均失败了。特别是,scores.txt必须已经存在,因此以下行151-154不会返回None。
try:
f = io.open(filename, "rb")
except OSError:
return None
这时,文件看起来不像GNU dbm,并且已经检查了dumbdbm,因此返回了”。
因此,除非您已经有一个数据库,否则请使用不存在的名称。禁用.txt,因为dumbdbm将创建filename.dat和filename.dir。 shelve.open文档说:“指定的文件名是基础数据库的基本文件名。副作用是,可能在文件名中添加了扩展名,并且可能创建了多个文件。”