调用Amazon Textract处理S3存储桶PDF文件失败报KeyError: 'Blocks'错误
AWS Textract处理S3存储桶PDF文件
KeyError: 'Blocks'错误解决方案 错误现象
已启动任务ID:43950fhihfe0r94th34hf0934hf349hg034fh9304fj90349gh349f
任务状态:FAILED
错误回溯:Traceback (most recent call last): File "C:/Users/hima459004/PycharmProjects/testproject/textract.py", line 62, in for item in resultPage['Blocks']: KeyError: 'Blocks'已接收到第1页结果集
进程执行结束,退出代码为1
错误根因
该错误是因为代码未预先校验Textract异步任务的执行状态,任务已经标记为FAILED的情况下,返回结果中不存在Blocks字段,直接遍历该字段就会触发键不存在报错。
修复步骤
1. 新增任务状态校验逻辑
在获取任务返回结果后,先判断任务状态,仅当状态为SUCCEEDED时再处理Blocks字段,任务失败时打印官方返回的错误原因,方便排查。
修复参考代码:
import boto3 textract = boto3.client('textract') job_id = "你的任务ID" # 获取异步任务结果 response = textract.get_document_text_detection(JobId=job_id) job_status = response['JobStatus'] if job_status == 'SUCCEEDED': # 任务执行成功,正常处理Blocks字段 for item in response['Blocks']: # 原有文本提取逻辑 pass elif job_status == 'FAILED': # 任务执行失败,打印错误原因 print(f"任务失败原因:{response.get('StatusMessage', '无官方错误提示')}")
2. 针对任务失败原因排查
常见FAILED状态的触发原因及对应解决方案:
- 权限配置错误:确认执行代码的IAM身份有S3桶的
s3:GetObject权限,同时Textract服务关联的角色有对应S3资源的读取权限 - 文件合规性问题:确认目标PDF未加密、未损坏,单文件大小不超过500MB,页数不超过3000页
- 区域不匹配:确认调用Textract服务的区域与S3存储桶所在区域完全一致,跨区域调用异步任务会直接失败
内容的提问来源于stack exchange,提问作者Himanshu Gaur
相关产品推荐
相关产品推荐

