首页/新闻资讯/正文详情

AI 辅助 Python 排错:从多出一个空页到回归测试

发布时间:2026/9/25 20:36:36 来源:云帆数科 栏目:资讯中心
AI 辅助 Python 排错:从多出一个空页到回归测试
4 条数据每页 2 条分页函数却返回了 3 页最后一页还是空的。代码没有抛异常接口也可能正常返回成功状态。直到调用方发现“下一页”里什么都没有问题才暴露出来。这类 Bug 很适合用来练习 AI 辅助排错函数短现象明确修复是否有效也能马上验证。关键是把输入、预期和实际结果交代清楚再让 AI 帮忙分析。下面用一个专门构造的教学案例走通这个过程。示例只使用 Python 标准库不需要接入模型 API也不依赖付费会员。1. 先把问题缩成能独立运行的代码假设我们正在整理一个数据导出脚本需要把列表按固定大小拆成多个批次。把原项目里的数据库、接口调用和日志先拿掉留下这个函数defpaginate(items,page_size):pageslen(items)//page_size1return[items[i*page_size:(i1)*page_size]foriinrange(pages)]print(paginate([1,2,3,4],2))实际输出[[1, 2], [3, 4], []]预期输出[[1, 2], [3, 4]]这个例子虽然小却已经提供了排错最有用的信息什么输入会触发问题、结果错在哪里、怎样才算修好。不要只把“分页有问题帮我看看”交给 AI。它拿不到业务约定很可能顺手改成另一套接口或者把空页当作合理行为保留下来。图 1先收集证据再提出修复假设最后重新运行用例。2. 把业务约定一起发给 AI在聊天工具里粘贴函数或在支持读取文件的编程助手中选中对应文件然后附上这段提示词请分析下面的 Python 分页函数先定位原因再给最小修复。 已知事实 - 输入 items[1, 2, 3, 4]page_size2。 - 实际输出 [[1, 2], [3, 4], []]。 - 预期输出 [[1, 2], [3, 4]]。 业务约定 - items 是内存中的 Python 列表。 - 返回值是列表组成的列表不返回空页。 - 空输入返回 []不是 [[]]。 - page_size 必须是正整数布尔值不接受。 - 不修改输入列表不引入第三方依赖。 请依次输出 1. 用具体输入推导错误发生的位置。 2. 区分已确认原因与仍需验证的猜测。 3. 给出保持函数名和参数不变的修复代码。 4. 列出会让旧实现失败的回归用例。 5. 说明修复的适用范围不要声称已经运行测试。 待分析代码 在这里粘贴完整函数这里最容易漏的是“空输入应该返回什么”。有些页面会保留一个空白展示页但这个函数负责拆分数据批次我们约定没有数据就没有批次。业务约定先确定测试才有可靠的预期值。真实项目里还应补充 Python 版本、完整异常堆栈以及相关调用位置。粘贴前去掉令牌、连接密码和真实用户数据能用合成数据复现就不必上传生产记录。3. 看懂修复原因才能判断 AI 有没有改对问题出在这一行pageslen(items)//page_size14 条数据每页 2 条整除结果已经是 2。再无条件加 1就变成 3 页。第三次切片取的是items[4:6]因此得到空列表。如果换成 5 条数据5 // 2 1恰好等于 3错误就被掩盖了。只测一个“普通输入”很容易觉得函数没有问题。图 2示例统一按每页 2 条计算能整除和不能整除都需要验证。可以修正页数公式也可以直接按每页的起始下标切片。后一种写法不需要单独维护页数变量。保存为pagination.pydefpaginate(items,page_size):iftype(page_size)isnotint:raiseTypeError(page_size must be an integer)ifpage_size0:raiseValueError(page_size must be greater than zero)return[items[start:startpage_size]forstartinrange(0,len(items),page_size)]对于 4 条数据range(0, 4, 2)只产生起始下标 0 和 2不会产生 4。空列表则没有起始下标自然返回[]。这里的类型检查是有意严格的。Python 中bool是int的子类使用isinstance(True, int)会得到True。示例约定只接受内置int因此用type(page_size) is int同时也会拒绝其他整数子类。这是接口约定不是适用于所有项目的通用写法。相关类型关系见 Python 内置类型文档。4. 让测试证明修复有效AI 解释得流畅不代表改动已经正确。把下面的代码保存为test_pagination.py与pagination.py放在同一目录importunittestfrompaginationimportpaginateclassPaginationTests(unittest.TestCase):deftest_exact_multiple(self):self.assertEqual(paginate([1,2,3,4],2),[[1,2],[3,4]])deftest_empty(self):self.assertEqual(paginate([],2),[])deftest_partial_page(self):self.assertEqual(paginate([1,2,3,4,5],2),[[1,2],[3,4],[5]])deftest_single_item(self):self.assertEqual(paginate([1],2),[[1]])deftest_size_one(self):self.assertEqual(paginate([1,2],1),[[1],[2]])deftest_invalid_size(self):forsizein(0,-1):withself.subTest(sizesize):withself.assertRaises(ValueError):paginate([1],size)deftest_invalid_type(self):forsizein(True,1.5,2,None):withself.subTest(sizerepr(size)):withself.assertRaises(TypeError):paginate([1],size)deftest_preserves_input(self):items[1,2,3]paginate(items,2)self.assertEqual(items,[1,2,3])if__name____main__:unittest.main()进入这两个文件所在目录运行python--versionpython-munittest-vtest_pagination.py环境要求Python 3无第三方依赖。如果电脑通过python3调用 Python就将两条命令中的python都替换为python3。本稿配套代码已在交付环境实际执行8 个测试方法全部通过其中非法参数使用子测试覆盖多个输入。测试输出末尾为Ran 8 tests in 0.000s OK运行耗时会随机器变化。这里验证的是内存列表拆分逻辑没有测试数据库分页、网络接口或前端翻页。unittest是 Python 标准库中的测试框架断言、异常检查和命令行运行方式可查阅 Python unittest 官方文档。5. 防止 AI 顺着错误代码生成错误测试如果你只说“给这个函数补测试”AI 可能把当前实现当作正确规格甚至把多出来的空列表写进预期结果。这样一来测试越齐全错误反而固定得越牢。更有效的追问是请根据业务约定复查测试不要根据现有实现反推预期值。 指出哪些用例能够揭露旧版本的 Bug。 如果把旧版本替换回来这些用例为什么应当失败 不要通过修改预期结果来迁就旧实现。这份示例中“4 条数据恰好分两页”和“空列表返回零页”都能揭露旧实现的问题。交付时也把这两个用例单独作用于旧函数确认它们确实失败。测试还应该包含正常路径比如 5 条数据拆成 3 页避免修复一个边界时破坏原来正常的行为。6. 把这个方法迁移到真实项目遇到更复杂的报错可以按同样的顺序整理材料先找到稳定复现的输入再写下业务预期缩小到相关函数或调用链最后让 AI 提出修复并补测试。如果只有线上偶发的问题暂时不能稳定复现就先让 AI 帮你设计需要补充的日志字段、可能的触发条件和验证顺序。不要把一个推测直接写成根因。示例函数也有明确边界它一次性构造所有分页结果适合已经在内存里的有限列表切片是浅拷贝页中的可变对象仍与原列表共享引用。处理大文件、生成器或数据库记录时应重新设计迭代读取或查询逻辑不能直接把这段代码套上去。下一次让 AI 帮忙排错可以先准备这三行触发问题的输入 我期望得到的结果 程序实际返回的结果再加上一条能够区分对错的测试你就有了检查 AI 修复建议的依据。

相关推荐

Agent安全:权限控制与沙箱执行
Agent安全:权限控制与沙箱执行

Agent安全:权限控制与沙箱执行 专栏:AI/LLM工程化实战 - 从Prompt到Agent的完整落地指南 模块4 Agent工程实战篇 第42篇 摘要 摘要:Agent权限最小化、工具白名单、代码沙箱subprocess受限执行、敏感数据脱敏、审计日志,是Agent安全防护的五大核心手段。用可运行Python实现一道工… · 2026/9/25 20:36:05

从Activity Log生成周报:工作事件模型、聚合规则与事实边界
从Activity Log生成周报:工作事件模型、聚合规则与事实边界

自动生成周报的可靠路径,不是让模型扫描所有聊天并自由总结,而是先建立轻量 Activity Log:用结构化工作事件记录结果、决定、阻塞、行动和来源,再按项目与时间聚合,最后由模型负责表达压缩。 工作事件模型 type WorkEv… · 2026/9/25 20:35:59

「Python 翻车日记 · 第 12 篇」一行 read() 读 5GB,电脑就炸了?——文件是流,不是一坨
「Python 翻车日记 · 第 12 篇」一行 read() 读 5GB,电脑就炸了?——文件是流,不是一坨

Python 翻车日记 第 12 篇:一行 read() 读 5GB,电脑就炸了?——文件是流,不是一坨 📋 本期菜单:6 个文件 I/O 的坑 + 1 个模式速查,从「read OOM」到「JSON 中文转义」 [入门] read OOM with 句柄泄漏 glob 不递归 二进制写 str [进阶] os.path.join 绝对路径丢弃 … · 2026/9/25 20:35:59

Atlas 300V 24G部署YOLO全攻略:从模型转换到推理调优
Atlas 300V 24G部署YOLO全攻略:从模型转换到推理调优

1. 先搞清楚:Atlas 300V 24G到底是不是一张“运算加速卡”服务器到货那天,我做第一件事不是急着装系统,而是先插上一块全新的计算卡。卡身上的印刷体小字写得很克制:Atlas 300V 24GB。随后我打开终端敲了一句npu-smi info&#xf… · 2026/9/25 22:24:20

AI创业者开发Agent:从架构选型到评估的实战避坑指南
AI创业者开发Agent:从架构选型到评估的实战避坑指南

1. 从一条只有标题的线索说起:AI创业者做Agent到底在做什么第一次看到"AI Frontier This AI entrepreneur is developing agent"这个标题时,我手里其实只有一句话,正文、关键词、摘要全是空的。这种"光杆标题"在信息流里… · 2026/9/25 22:24:20

SaaS 选型指南:支持考勤打卡与提成自动结算的管理系统对比
SaaS 选型指南:支持考勤打卡与提成自动结算的管理系统对比

实体门店的人员管理与薪资核算,是中小商户日常运营的核心痛点。多数服务型门店员工岗位灵活,技师、销售、前台多岗位并存,业绩统计、考勤登记、提成核算依赖人工手动整理,不仅耗时费力,还容易出现数据误差、核算标准不… · 2026/9/25 22:24:13

Atlas 300V 24G推理加速卡解读与YOLO部署实战
Atlas 300V 24G推理加速卡解读与YOLO部署实战

如果把“atlas 300v 24g 是运算加速卡吗”这个问题扔到任何一个AI技术群里,十有八九会吵起来。有人说是推理卡,有人说是加速卡,还有人直接把它当显卡用,结果发现连个显示器接口都没有。我刚拿到这块卡的时候也是一脸懵&#xff0c… · 2026/9/25 22:24:13

AI Agent动态协作机制演进与实战调优
AI Agent动态协作机制演进与实战调优

1. 这不是“多个AI聊天框堆在一起”——真正理解AI Agent协作机制的演进逻辑你有没有试过让两个大模型同时帮你写一份产品需求文档?一个负责梳理用户痛点,一个负责设计功能流程,结果发现它们各自为政、互相矛盾,甚至把对方刚生成的… · 2026/9/25 22:23:40

16G显存跑通QLoRA微调Qwen2.5-7B:从原理到实战
16G显存跑通QLoRA微调Qwen2.5-7B:从原理到实战

很多朋友看到“16G 显存跑 Qwen 7B 微调”,第一反应都是“别开玩笑了”。按常规全参微调的算账方式,7B 模型光权重就要 14GB(bf16),加上梯度和 AdamW 优化器状态,40GB 都不一定够,16G 确实像天方… · 2026/9/25 22:23:40

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码