调用Amazon Rekognition打印结果触发IndexError索引越界求助
解决Amazon Rekognition Face Search的IndexError问题
这个问题我帮好几个开发者排查过类似情况——你的response['Persons']是个空列表,所以用[0]访问第一个元素时才会触发IndexError: list index out of range。
为什么会出现空的Persons列表?
主要有这几个可能的原因:
- 你的Face Search任务没有在视频中检测到任何人脸(或者没有匹配到你指定人脸库中的人脸)
- 任务还没完成(比如
JobStatus是IN_PROGRESS),此时返回的结果还没有生成人脸数据 - 你传入的
jobID有误,对应了一个没有人脸结果的任务
怎么修复这个问题?
最直接的方案是先判断列表是否非空,再访问索引,同时最好先检查任务状态是否成功:
response = get_face_search(jobID) # 先检查任务是否成功完成 if response['JobStatus'] != 'SUCCEEDED': print(f"任务状态异常:{response['JobStatus']}") # 如果是FAILED,可以查看response['StatusMessage']获取失败原因 if 'StatusMessage' in response: print(f"失败原因:{response['StatusMessage']}") else: # 检查Persons列表是否有内容 if response['Persons']: time = response['Persons'][0]['Timestamp'] print(time) else: print("视频中未检测到任何人脸或匹配结果")
额外提醒
永远不要假设API返回的列表一定有元素,尤其是涉及到AI识别的服务——因为识别结果完全依赖输入的内容。养成先判断列表长度或直接用if my_list:(空列表在Python中会被视为False)的习惯,能避免很多这类索引越界错误。
内容的提问来源于stack exchange,提问作者H.Dai
相关产品推荐
相关产品推荐

