Python遍历字符串数组嵌套循环报错:TypeError问题求助
解决列表索引类型错误(TypeError: list indices must be integers or slices, not str)
我来帮你搞定这个错误!你遇到的问题出在for循环的遍历方式上,咱们一步步拆解分析:
首先看你代码里的循环逻辑:
arrayOfPhotos = ["1.jpg", "2.jpg", "3.jpg", "4.jpg"] for name in arrayOfPhotos: detections = detector.detectObjectsFromImage(input_image=arrayOfPhotos[name], output_image_path="holo3-detected.jpg")
这里的for name in arrayOfPhotos是直接遍历数组里的每一个元素,也就是说name的值就是数组里的字符串(比如第一轮循环时name是"1.jpg",第二轮是"2.jpg")。但你接下来用arrayOfPhotos[name]去“再次取元素”,这就犯了一个典型错误——列表的索引必须是整数或者切片,不能是字符串,所以才会抛出这个报错:
Traceback (most recent call last):
File "dTEST.py", line 13, in
detections = detector.detectObjectsFromImage(input_image=arrayOfPhotos[name], output_image_path="holo3-detected.jpg")
TypeError: list indices must be integers or slices, not str
修正方案
你根本不需要用索引去“二次获取”元素,因为name已经是你要的文件名了!直接把代码改成这样:
arrayOfPhotos = ["1.jpg", "2.jpg", "3.jpg", "4.jpg"] for name in arrayOfPhotos: # 直接用name作为input_image的参数值 detections = detector.detectObjectsFromImage(input_image=name, output_image_path="holo3-detected.jpg") for detection in detections: # 同样直接用name打印结果 print(name, " : ", detection["percentage_probability"])
如果之后你需要用到数组的索引(比如记录是第几张图片),可以用enumerate来同时遍历索引和元素,示例如下:
arrayOfPhotos = ["1.jpg", "2.jpg", "3.jpg", "4.jpg"] for idx, name in enumerate(arrayOfPhotos): print(f"正在处理第{idx+1}张图片:{name}") detections = detector.detectObjectsFromImage(input_image=name, output_image_path="holo3-detected.jpg") for detection in detections: print(name, " : ", detection["percentage_probability"])
这样修改后,就不会再触发索引类型错误了,程序应该能正常遍历每张图片进行检测~
内容的提问来源于stack exchange,提问作者refaeldimri
相关产品推荐
相关产品推荐

