You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用shelve将字典保存到.db文件?代码报错及加载异常求助

字典持久化问题修正方案

核心问题点

  • 保存逻辑错误:直接给s赋值字典会覆盖shelve对象引用,根本没把数据写入文件
  • 加载逻辑错误:返回的是shelve对象而非实际字典数据
  • 文件名不匹配:保存的是OperationNamesDictionary.db,加载时写成了TOperationNamesDictionary.db,多了个前缀T

修正后的完整代码

保存字典函数

def save_dict(dictionary_to_be_saved): 
    with shelve.open('OperationNamesDictionary.db', 'c') as s:
        # 用update把字典的键值对批量写入shelve
        s.update(dictionary_to_be_saved)
        # 如果你想把整个字典作为单个条目存储,也可以这么写:
        # s['full_dict'] = dictionary_to_be_saved

加载字典函数

def load_dict():
    try:
        with shelve.open('OperationNamesDictionary.db', 'r') as s:
            # 对应update的加载方式:把shelve对象转成普通字典
            operation_names = dict(s)
            # 对应单个条目存储的加载方式:提取指定键的值
            # operation_names = s['full_dict']
            return operation_names
    except dbm.error:
        print("Could not find a saved dictionary, using a pre-coded one.")
        # 这里可以返回你的预定义字典,比如:
        # return {"op1": "操作1", "op2": "操作2"}

operation_names = load_dict()
print(operation_names)

说明

  • 保存时:update()方法会把传入字典的所有键值对写入shelve文件;如果用单个键存储整个字典,适合需要保留原字典结构作为整体的场景
  • 加载时:dict(s)会把shelve对象转换成普通Python字典,这样打印出来的就是实际数据而非对象引用
  • 务必保证保存和加载的文件名完全一致,否则会触发找不到文件的异常

内容的提问来源于stack exchange,提问作者Nayasaal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:31:05