SDK 从 2.x 升到 3.0 后,识别成功但解析抛 KeyError: 'words_result',整条链路 500,前一天还正常。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
data = resp.get('result') or resp.get('words_result') or {}
lines = data.get('lines', [])
print(len(lines))
新版把顶层字段改成 result,里面再分 paragraphs 和 lines。解析代码直接下标取旧字段,没有版本判断,也没有兜底默认值。这一点先确认清楚,后面就不用反复试。
碰到「识别返回字段变更」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
具体做法是,解析层用 get 加显式版本分支;升级前用十张固定样本跑新旧结构对比;把响应原文存一份 便于回放;锁定小版本 避免构建时自动升到新结构。
改完照着核一遍,同一批图片改造后都能解析出文字 日志里不再出现 KeyError。
