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 模型

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

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

相关推荐
进击的明明3 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
全栈弄潮儿4 小时前
Python实战第8期:函数
后端·python·编程语言
卷无止境5 小时前
暗流与破局:AI时代的代码安全审查工具全景指南
后端·python
卷无止境8 小时前
一人公司的全栈选型指南:让 AI Agent 写得快,也让生意跑得稳
后端·python
滴啦嘟啦哒10 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
全栈练习生10 小时前
AI安全与红队测试
python·ai
费曼学习法10 小时前
把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程
python·ai编程·自动化运维
鸽鸽程序猿10 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
by2099910 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
NetX行者10 小时前
Python 工程化入门:从脚本到规范的 Python 项目结构
网络·python