Python CLI Todo:一次数据结构错误引发的 Bug

今天做 CLI Todo 时遇到了一个很典型的 Bug。

删除任务时,我原本应该保存整个任务列表:

复制代码
save_tasks(tasks)

却误写成了:

复制代码
save_tasks(task)

结果 tasks.json 从原来的列表:

复制代码
[
  {
    "id": 5,
    "title": "学习Docker",
    "done": true
  }
]

变成了一个字典:

复制代码
{
  "id": 5,
  "title": "学习Docker",
  "done": true
}

之后程序执行:

复制代码
for task in tasks:
    if task["id"] == task_id:

由于 tasks 已经变成字典,遍历它得到的是 "id"、"title"、"done" 这些字符串,而不是任务字典,因此最终出现:

复制代码
TypeError: string indices must be integers

这次 Debug 学到的东西

看到 traceback 后,不应该只盯着最后一行。

应该沿着调用链检查:

复制代码
TypeError
↓
find_task()
↓
tasks 的类型不对
↓
检查 tasks.json
↓
发现数据结构已经被破坏
↓
继续向上找写入数据的地方
↓
发现 save_tasks(task) 写错

真正的问题不是 find_task(),而是上游写入的数据结构已经发生了变化。

一个简单的 Debug 模型

当错误出现在某个函数里时,不一定是这个函数本身有问题。先确认它拿到的数据是否符合预期。

这类"上游数据错误 → 下游出现看似无关的异常"在实际开发中非常常见。

相关推荐
鬼手点金1 小时前
Claude Code示范案例-修复 Bug 工作流
java·服务器·前端·javascript·bug·openclaw
“AI国潮设计-小江”1 小时前
【AIGC实战】Python+SDXL打造潮汕国潮IP:英歌舞麻将的自动化生成与商用思路
开发语言·人工智能·python·prompt·aigc
zh路西法1 小时前
【上手一只MicroDuck】:(一)从机器人结构到强化学习训练框架
python·强化学习·huggingface·ppo·mujoco·microduck
alphaTao2 小时前
LeetCode 每日一题 2026/9/21-2026/9/27
python·算法·leetcode
CQU_JIAKE2 小时前
9.28【A】
数据结构
计算机源码社2 小时前
【27届大数据毕设】基于Spark的AI艺术创作者价值评估与市场趋势预测研究 基于Python与Spark的AI生成艺术受众画像及异常热度识别可视化平台
大数据·人工智能·hadoop·python·spark·毕业设计·课程设计
huisheng_qaq4 小时前
【Python基础篇-04】深入理解python的函数、参数与作用域
python·ai·函数·参数作用域
宸津-代码粉碎机9 小时前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
Y3815326629 小时前
SERP API 计费口径:credits_charged、执行失败扣费与退款边界
python·搜索引擎