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

Python/JSON:循环列表按条件向另一列表添加值时出错求助

排查与修复Python JSON处理中的循环错误

先梳理你代码里几个可能引发错误的关键点,以及对应的修复方案:

1. 冗余且易出错的元素引用

你在循环里写了allReqs[allReqs.index(x)],这完全没必要——x本身就是allReqs当前遍历的元素,直接用x即可。而且如果allReqs里存在重复元素,index(x)只会返回第一个匹配项的索引,导致你拿到的questData完全错误,甚至引发逻辑bug。

2. 未处理questData为None的情况

当next((i for i in response.json()['quests'] if i['title'] == x), None)没找到匹配的标题时,questData会是None。这时候再调用questData.get(key,''),会直接抛出AttributeError: 'NoneType' object has no attribute 'get',这是这类代码里非常常见的报错点。

3. 未完成的elif语句

你的代码里elif data['s...没写完,这会直接导致语法错误,Python解释器根本无法运行这段代码。


修复后的完整代码示例

from collections import OrderedDict  # Python3.7+可直接用普通dict替代

allReqs = getReqs(searchQuest, emptyList)
toDoList = []
# 提前缓存quests数据,避免每次循环重复解析JSON,提升效率
quests_data = response.json().get('quests', [])

for quest_title in allReqs:
    # 直接用当前遍历的标题匹配,替代冗余的index调用
    questData = next((i for i in quests_data if i['title'] == quest_title), None)
    
    # 先判断questData是否存在,避免后续报错
    if not questData:
        print(f"警告:未找到标题为{quest_title}的任务数据")
        continue  # 跳过当前元素,处理下一个
    
    # Python3.7+可直接用dict,默认保持插入顺序
    data = OrderedDict()
    for key in ('title','status','difficulty','members','questPoints','userEligible'):
        data[key] = questData.get(key, '')
    
    # 完善条件判断逻辑,这里补充你未写完的分支示例
    if data['status'] == "NOT_COMPLETED":
        toDoList.append(f"{data['title']} REDDD")  # 用f-string更清晰易读
    elif data['status'] == "IN_PROGRESS":
        toDoList.append(f"{data['title']} IN_PROGRESS")
    elif data['status'] == "COMPLETED":
        # 根据需求选择处理或跳过已完成任务
        pass
    else:
        # 处理未知状态,避免遗漏异常情况
        print(f"未知任务状态:{data['status']},任务标题:{data['title']}")

额外优化建议

  • 缓存JSON数据:把response.json()['quests']提前赋值给quests_data,避免每次循环重复解析JSON,提升代码运行效率。
  • 使用f-string格式化:相比字符串拼接,f-string更易读且不易出错。
  • 替换OrderedDict:从Python3.7开始,标准dict已经会保留插入顺序,所以可以直接用data = {}替代OrderedDict(),减少不必要的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:10:46