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

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

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

相关推荐
一晌小贪欢40 分钟前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
zh_xuan1 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
一条大祥脚2 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机2 小时前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_3 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰3 小时前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain
卷无止境3 小时前
百万 token 时代的真相:主流大模型上下文窗口与最大输出的横向对比分析
人工智能·python
用户298698530144 小时前
Python 实战:将 HTML 批量转换为 Markdown
python·html·markdown
hhcgchpspk4 小时前
flask服务端页面预防被爬措施
后端·python·flask·网络爬虫·防爬
小小张说故事4 小时前
Python 里 copy.copy() 和 deepcopy() 到底差在哪:拆开 __copy__、__deepcopy__ 和那个防止无限递归的 memo 字典
python