结论先说:例外情况不要写成一句“特殊情况另行处理”,而要写成“触发条件 + 判断依据 + 处理动作 + 未命中时的默认行为”四段式。只有当例外能被稳定识别、且处理动作不会破坏主流程时,才适合写进脚本需求;如果例外依赖人的临场判断,更稳妥的做法是把它标成人工确认节点,而不是硬编码进自动化流程。
写需求前,先把收集到的例外逐条过一遍,问自己一个问题:换一个执行的人,只看给定字段,能不能得出同一个结论。能,就是可判定例外;不能,就是需判断例外。
把需判断的例外硬写成 if-else,脚本会给出一个看似确定的错误答案,比直接报错更难排查。反过来,把可判定例外交给人工,会让确认队列迅速堆积,自动化等于没做。
每条例外单独成段,按下面四段描述,缺一段就说明需求还没想清楚。
一个假设的例子:某批历史文章需要补全摘要字段。需求可以写成“若正文少于 80 字,则不生成摘要,标记为待人工确认;其余记录按主流程生成”。这里的 80 字只是示例阈值,真实值应来自你自己的数据分布,而不是照搬。
如果例外之间会互相覆盖,四段式逐条罗列反而会制造矛盾。比如“字段为空则跳过”和“字段为空则用默认值补齐”同时存在,脚本执行顺序不同,结果就不同。
这时要补一层优先级规则:明确哪条例外先判、命中后是否还继续判后续条件。否则测试时可能碰巧通过,换一批数据就出现前后不一致。判断需求是否已经足够稳,可以看一个信号:把例外清单交给没参与整理的人,他能否在不提问的情况下说出每条的执行顺序。做不到,就说明优先级还没写死。
需求写完不要直接上线。先挑一批已经人工处理过的历史数据做干跑,把脚本输出和人工结论逐条对比。
比较前后结果时要注意,不同时间段的搜索需求、内容来源和采集方式本身会变化,处理量下降或异常数归零,既可能是规则生效,也可能是数据源变了、采集范围缩小或字段口径调整。要确认是哪一种,得回到原始数据看分布,而不是只看汇总数字。干跑通过后,再把这批例外规则沉淀成可复用的检查项,供下一篇同类需求直接引用。