例外情况要写成“触发条件 + 判断依据 + 动作 + 记录字段”,而不是一句“特殊情况特殊处理”。如果例外无法用可观察的数据表达,就应该保留人工确认;只有当例外有稳定信号、明确兜底动作,并且出错后能回滚,才适合交给脚本自动执行。
人工经验里的例外,通常不是同一种东西。把它们混在一起写进需求,脚本要么过度触发,要么在关键节点沉默。
区分方法是问一句:这个例外发生时,执行人看的是同一组数据吗?如果不同的人会看不同信号,说明判断依据还没收敛,此时改写为自动化规则风险较高。
脚本需求里最常见的失败写法是“遇到异常就跳过”。跳过之后没有记录,后续无法判断是数据问题还是规则问题。可执行的写法至少包含四部分:
假设一个场景:你原本靠人工检查页面标题是否与正文主题一致,现在想把这步写成脚本。可以写成“当标题字段为空时,标记为待确认并输出页面地址;当标题非空但与正文首段重合度低于设定阈值时,只记录不修改”。这里阈值是假设值,作用是把“明显不一致”和“可能不一致”分开,而不是承诺任何效果。
有些例外看起来能写成条件,实际上信号不稳定。例如同一类页面,有的因为业务调整暂时不处理,有的因为数据延迟看起来异常。如果脚本只根据单一字段判断,就会把两类情况混在一起。
判断是否保留人工,可以看三个条件是否同时成立:
三个条件都成立时,保留人工更合理。脚本的职责改为收集证据、排序和提示,而不是替人做决定。反过来,如果例外频繁出现、判断依据固定、误判可回滚,就可以改写为自动规则,并设置抽样复查。
验证不是看脚本有没有报错,而是看例外是否被分到了正确的分支。可以先跑一批历史数据,比较脚本判定与人工判定不一致的条目,逐条确认是规则问题还是人工当时有额外背景。
这里要注意一个容易误判的现象:某段时间例外数量突然归零,不一定说明规则变准了。也可能是上游字段口径变了、采集范围缩小,或者脚本在更早的分支就拦截了。遇到归零,先检查触发条件的覆盖范围和上游数据量,再判断规则是否有效。
比较改动前后时,还要考虑季节和搜索需求变化。同一批页面在两个时间点的表现差异,可能来自需求波动而不是例外处理改动。更稳妥的做法是固定一批样本,分别用旧流程和新脚本处理,比较判定结果和处理动作,而不是直接比较流量或排名。
不是所有例外都值得长期维护。出现以下情况时,可以考虑退出当前处理方式:
退出的方式可以是合并到正常分支、改为定期人工巡检,或者直接取消该例外规则并把资源移到更稳定的环节。决定退出前,先确认这个例外是否仍在保护某个关键前提;如果前提已经变化,继续保留只会增加维护成本。
把例外写清楚的目的,不是让脚本覆盖所有情况,而是让每个分支都有明确的适用条件和可回查的结果,这样下一次调整时才知道该改哪里。