python 3.3中shelve.keys()的异常行为



我有一个简短的搁置实践程序,它在python 2.7中按预期运行。我把它移到了3.3,比如:

import shelve
db = shelve.open('lib')
db['a'] = "string1"
db['b'] = "string2"
keylist = db.keys()
print( keylist )
db.close()

现在我得到了这个结果(不完全是错误,但不是期望的行为:

KeysView(<shelve.DbfilenameShelf object at 0x7f0f06b3be90>)

有什么问题以及如何解决的想法吗?3.3的搁置有什么变化吗?

shelve的行为就像dict一样,它已经改变了。。。在Python 2.x中,dict用于在调用.keys()时返回列表,而在Python 3.x中,它返回键的视图对象。如果你想要真正的钥匙,你必须把它们变成list:

keylist = list(db.keys())

最新更新