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

Python跨函数传递JSON字典内路径触发KeyError如何解决

报错原因

你传入的"['first']['second']"是一个完整字符串,函数内部会把这个字符串当作单个字典键去查询JSON对象,而你的JSON里根本不存在名为"['first']['second']"的键,自然触发KeyError。你直接写ReadedJSONObjects['first']['second']时Python解释器会自动解析成两次层级取值,先取'first'对应的字典,再取'second'对应的列表,和把整串当单个键的逻辑完全不一样。

推荐解决方案

优先用**键序列(列表/元组)**传递路径,这是最安全、性能最高的方案,不需要做额外的字符串解析:

  • 传递路径时,把多层键按顺序放到列表里,比如目标路径是['first']['second'],就传参数['first', 'second']
  • 函数内部遍历键序列逐层取值即可,示例实现如下:
def replaceJSONFilesList(json_obj, key_path, append_items):
    current = json_obj
    # 逐层遍历到目标列表的父层级
    for key in key_path[:-1]:
        current = current[key]
    # 拿到目标列表执行追加
    target_list = current[key_path[-1]]
    target_list.extend(append_items)
    # 后续写回文件的逻辑保持不变即可

# modifyJSONFile 内调用示例
replaceJSONFilesList(ReadedJSONObjects, ['first', 'second'], [要追加的内容])

兼容字符串格式路径的方案

如果一定要保留"['first']['second']"这种字符串格式的路径写法,可以用ast.literal_eval安全解析字符串为键序列,不要用eval避免执行恶意代码:

import ast

def parse_path_string(path_str):
    # 拼接成虚拟的字典取值表达式,解析后得到所有键的元组
    return ast.literal_eval(f'_dummy{path_str}')

# 调用前先解析路径
key_path = parse_path_string("['first']['second']")
replaceJSONFilesList(ReadedJSONObjects, key_path, [要追加的内容])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 23:36:02