先给结论:例外情况不要写成“特殊情况另行处理”,而要写成“当某个可观察条件成立时,脚本做什么、不做什么、留下什么记录”。在百度指数添加方法这类任务里,人工经验往往包含“这个词看着不对就不加”“这个词和已有词冲突就停一下”之类的判断,脚本需求若只写正常流程,执行者只能靠猜。更稳的做法是把例外拆成三类:可自动判定、需要人工确认、必须终止并留痕。下面用一个假设情境说明取舍。
假设你要把一份人工整理过的词表交给脚本,让脚本按百度指数添加方法完成批量添加。人工操作时,老手会顺手处理三种情况:词已经被添加过、词与已有词高度相似、词在目标分组里找不到合适位置。如果需求只写“依次添加”,脚本遇到第一种可能重复提交,遇到第二种可能直接跳过,遇到第三种可能报错退出。三种例外的代价不同,所以描述方式也不能一样。
这里的选择不是“写不写例外”,而是“例外由脚本判断还是由人判断”。判断权放在哪一侧,取决于条件是否可观察、误判成本是否可接受、以及人工介入是否频繁。
可自动判定的例外,通常有明确的外部信号,例如返回状态、字段是否为空、目标分组是否存在。描述时用“当……时,执行……,并记录……”的句式,而不是形容词。比如“当词已存在时,跳过并写入已存在清单”,比“重复的词不要加”更接近可执行需求。
一个实际动作是:让脚本在每次跳过时输出词、原因、时间三列。这个动作的结果会直接影响下一步——如果跳过清单里大量出现同一原因,说明前置词表需要先清洗,而不是继续调脚本。若跳过原因分散,才值得进入逐条确认环节。
需要提醒的是,跳过数量归零不能单独证明处理正确。它也可能意味着条件写得太宽、脚本根本没识别到例外,或者输入词表本身已经变干净。要结合输入规模、重复率和人工抽查来判断。
有些例外不适合自动处理,比如词义相近但业务上是否算同一个词、某个词是否属于当前分组。这类情况的可观察信号弱,误判成本高。描述时应写成“脚本暂停该条,输出候选信息,等待人工选择”,而不是“自动合并”或“自动归类”。
这里存在两种看似合理的做法:一是让脚本按相似度阈值自动合并,二是全部暂停等人工。选择条件是误判代价和人工量。若误判后可以低成本撤销,且人工量很大,可以设一个保守阈值先自动处理明显重复项;若误判会污染分组结构、后续很难追溯,就应暂停。代价是人工确认会拖慢整体进度,所以需求里要说明暂停后由谁在什么时限内处理,否则脚本会停在半途。
还有一类例外一旦出现,继续执行会放大错误,例如目标分组不存在、权限不足、词表格式与约定不符。这类情况应写成终止条件,并说明终止前已处理到哪一条、如何从断点恢复。只写“报错退出”不够,因为执行者不知道重跑会不会重复添加。
一个可操作的做法是:脚本按批处理,每批完成后写入进度标记;终止时保留标记和未处理清单。这样下一步不是从头重跑,而是先核对标记与未处理清单,再决定修复后从哪一批继续。这个动作把“例外”从故障变成了可恢复的中断。
把这三点补进需求后,再回头检查正常流程是否仍然完整。例外描述不是给正常流程打补丁,而是让正常流程在边界条件下仍然可解释。若一次改动前后要比较效果,应把季节、搜索需求变化和数据采集差异一并考虑,不能只看单次结果就断定处理方式正确。最后,把例外清单和正常流程放在同一份需求里评审,才能让写脚本的人和执行脚本的人对同一件事有相同预期。