这次先读懂代码,不急着让 AI 改
问题是:“用户提交 quantity='2',在哪里校验,在哪里转成整数,最终保存什么?”你会把三个小文件交给 Kimi,要求回答按实际调用顺序带依据。随后加入一个没被调用的旧函数,看看答案能否避开干扰。
使用 Kimi上传文件或粘贴带文件名的代码。文件读取入口以账号实际功能为准。Kimi 新用户入口。本课文件很短,重点是证据追踪,不需要追求最大上下文。
准备三份完整材料
建立一个空目录,按文件名分别保存。代码块使用 text 是为了强调它们是待分析的三个文件;最后会给一个无需导入文件的运行对照。
# repository.py
saved = []
def save_order(quantity):
record = {"quantity": quantity}
saved.append(record)
return record
# service.py
from repository import save_order
def create_order(raw_quantity):
if not isinstance(raw_quantity, str) or not raw_quantity.isascii() or not raw_quantity.isdigit():
raise ValueError("quantity 必须为十进制数字字符串")
quantity = int(raw_quantity)
if quantity < 1:
raise ValueError("quantity 必须大于零")
return save_order(quantity)
def legacy_order(raw_quantity):
return save_order(raw_quantity)
# route.py
from service import create_order
def submit(payload):
return create_order(payload["quantity"])
repository 中的列表只是教学内存存储,退出进程不会持久保存;别把它当作生产数据库。
提出一个带证据的问题
根据我给的 route.py、service.py、repository.py,追踪 submit({"quantity":"2"})。
按调用顺序列出文件名、函数名、关键代码和数据类型变化。
说明合法性检查在哪里,最终保存的是字符串还是整数。
指出 legacy_order 是否在这条路径上,不能因为函数存在就假设它被调用。
只依据提供的文件;缺少文件时明确指出不能确认的环节。
先看答案是否从 route.submit 开始,而不是从搜索到的第一个 quantity 开始。证据片段不必很长,必须能对应到真实调用。
正确答案应该具体到这里
route.py 的 submit 取出字符串 "2",调用 create_order;service.py 检查字符串为 ASCII 数字,再 int 转为整数 2,并检查大于零;随后调用 repository.py 的 save_order,将整数 2 放入记录。legacy_order 没有被 submit 调用,因此不能用它的“直接保存原值”解释这次路径。
你可以在该目录运行:
python -c "from route import submit; print(submit({'quantity':'2'}))"
应得到 {'quantity': 2},不是 {'quantity': '2'}。零字符串 "0" 应触发 ValueError;缺少 quantity 则当前代码抛 KeyError,别让助手宣称它已经有完整 HTTP 错误响应。
缺一份文件再问一次
新开对话,只提供 route.py 和 repository.py,不给 service.py,重复原问题。合格的回答应指出:能够确认入口调用 create_order、保存函数接收 quantity,但中间如何转换尚无证据。不能照着上一轮记忆补出未提供文件。
如果回答猜测“service 一定会转整数”,修订:
本轮没有提供 service.py。请把已知调用与未知实现分开,不把常见写法当作本仓库事实。告诉我还需要哪个函数的源码,才能确认类型转换与范围校验。
这项练习用来识别证据边界,不是故意为难模型。实际大仓库中也常发生读取不全。
再让它提出一项小修复
读懂后再改缺字段行为:要求 submit 缺少 quantity 时抛带清楚消息的 ValueError,保持 "2" 的转换与 "0" 拒绝不变。助手应改入口处理及对应测试,而不是顺便把内存列表换成数据库。