有条件的结论是:例外情况必须写成“触发条件+系统动作+人工兜底”三件套,否则脚本只能处理正常路径,遇到异常就静默跳过或报错退出。这个结论成立的前提是你已经知道异常长什么样;如果连一次完整的人工操作记录都没有,先补记录再写需求,否则脚本会把未知异常当成正常情况处理。
人工操作时,很多判断是顺手做的,写脚本时容易被误当成规则。判断标准很简单:这个偏差能否用已有字段和固定阈值描述。能,就是规则内偏差,写成条件分支;不能,就是规则外异常,写成中断并交回人工。
假设一个场景:你每次发布文章前会检查图片是否都有描述文字。如果只是“有或没有”两种状态,属于规则内偏差,脚本可以遍历图片标签,发现缺少描述就补一个占位值。但如果图片是从外部复制来的、描述文字需要结合上下文重写,这属于规则外异常,脚本应当停止并输出待处理清单,而不是自动填一个通用描述。这里的数字和场景均为假设,用于说明判断方法,不代表任何真实项目结果。
把这两类分开写,需求文档里就不会出现“遇到问题自行判断”这种无法测试的句子。
“网络不稳定”“内容不合适”这类描述无法转成代码。可观察的信号包括:返回状态码、字段是否为空、文件大小是否为零、两个值是否相等、某一步耗时是否超过设定阈值。写需求时,把例外绑定到这些信号上。
每条例外都要写明脚本接下来做什么:是跳过、停止、重试,还是写日志后继续。只写“处理异常”等于没写。
有人为了省事,把任何失败都写成“重试三次”。这会让真正的例外被掩盖:如果失败原因是权限不足或字段结构变化,重试三次仍然失败,只是把同一个错误重复记录了三遍,日志变长但信息没有增加。更麻烦的是,重试会拖延后续步骤,让你误以为脚本还在正常工作。
使这个反例成立的条件是:失败原因属于确定性错误,而不是临时波动。区分方法是看同一输入重复执行是否得到相同失败结果。相同,就不要重试;不同,才考虑有限重试。这个判断不需要完整数据权限,只需要把失败样本单独跑一遍。
如果你拿不到全量日志或后台权限,仍可以做一件事:挑一条已经人工处理过的记录,把当时的判断点逐条写下来,标注哪些判断有明确依据、哪些只是凭经验。然后针对“凭经验”的部分,写出如果脚本遇到同样情况,你希望它停下来还是继续。
这个动作的结果会直接影响下一步:能写成条件的部分进入脚本需求,写不成条件的部分进入人工复核清单。两份清单分开后,你就知道脚本上线后哪些环节必须有人盯着,而不是等出错再回头补规则。
需要提醒的是,改动前后做比较时,搜索需求本身可能随季节变化,采集时间点不同也会带来差异。某次统计归零或某项数量下降,不能单独证明例外处理写对了,也可能是采集范围变化或需求本身波动。因此例外清单要配合人工抽查记录一起看。
三个问题都能答上来,例外描述才算可交接。答不上来的条目,先留在人工清单里,不要硬塞进脚本。