You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Form Recognizer导出发票结果到CSV报KeyError: 'text'如何解决

Azure Form Recognizer发票识别脚本KeyError: 'text'报错解决方案

报错原因

这个错误触发的核心原因是:当Azure Form Recognizer预构建发票模型无法识别某一个发票字段时,返回的字段结构体中不会携带text键,原始脚本未做容错处理,直接访问不存在的键就会抛出KeyError。

排查步骤

  • 首先检查生成的.invoice.json缓存文件,打开后定位到analyzeResult.documentResults[0].fields节点,确认是否存在缺少text属性的字段
  • 确认你使用的Form Recognizer接口版本和代码适配的版本一致:当前代码适配的是v2.1版本,如果你将endpoint中的版本号改为v3.0+,返回结构会发生变化,也会触发该报错

修复方案

修改parseInvoiceResults函数中的字段取值逻辑,使用dict.get()方法替代直接按键取值,不存在的键默认返回空字符串即可,修改后的代码段如下:

def parseInvoiceResults(resp_json):
    docResults = resp_json["analyzeResult"]["documentResults"]
    invoiceResult = {}
    for docResult in docResults:
        for fieldName, fieldValue in sorted(docResult["fields"].items()):
            valueFields = list(filter(lambda item: ("value" in item[0]) and ("valueString" not in item[0]), fieldValue.items()))
            # 新增容错逻辑:不存在text键则默认返回空字符串
            field_text = fieldValue.get("text", "")
            invoiceResult[fieldName] = field_text
            if len(valueFields) == 1:
                print("{0:26} : {1:50}      NORMALIZED VALUE: {2}".format(fieldName , field_text, valueFields[0][1]))
                invoiceResult[fieldName + "_normalized"] = valueFields[0][1]
            else:
                print("{0:26} : {1}".format(fieldName , field_text))
    print("")
    return invoiceResult

其他注意事项

  • 如果之前运行过脚本生成了.invoice.json缓存文件,建议先删除所有缓存文件后重新运行,避免旧的错误结构文件导致重复报错
  • 如果你需要使用v3.0+版本的Form Recognizer接口,需要完全调整解析逻辑,适配新版本的返回字段结构
  • 可以额外增加置信度校验逻辑,对于confidence字段低于阈值的识别结果,直接置为空,降低错误数据的占比

内容的提问来源于stack exchange,提问作者user9855045

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:39:03