带字符范围判断的For-loop/if-statement报KeyError:0求助
问题分析与解决
错误原因
KeyError: 0 不是因为merge_image1是字典,而是你循环遍历的元素i不是字符串,而是字典(或其他映射类型)。当你执行i[0:36]时,Python会把0当作字典的键去查找,而该键不存在,所以抛出KeyError。
大概率是你构建merge_image1时出了问题,比如误将字典或其他非字符串数据塞进了列表里,导致遍历到的元素不是预期的图片路径字符串。
排查与修复步骤
确认merge_image1的元素类型
在循环前添加一行代码,打印所有元素的类型:print([type(item) for item in merge_image1])如果输出里有
<class 'dict'>,说明列表混进了字典元素,需要回溯merge_image1的生成逻辑,确保每个元素都是图片路径字符串。修正代码里的其他问题
即使解决了KeyError,你的代码还有几个潜在问题,一并修正:- 路径拼写错误:
Sitmuli应该是Stimuli(少了字母t) - 变量名不一致:第一个条件用
image_valence1,第二个用image_valence,会导致数据分散或变量未定义 - 硬编码切片长度不安全:如果字符串长度不足36或31,会引发索引错误,改用
startswith()方法更稳妥
修正后的代码示例:
for i in merge_image1: # 先确保i是字符串,避免非预期类型报错 if isinstance(i, str): if i.startswith('Stimuli/Faces/resized_positive_faces'): image_valence1.append('positive') elif i.startswith('Stimuli/Faces/resized_neg_faces'): image_valence1.append('negative')- 路径拼写错误:
内容的提问来源于stack exchange,提问作者cjb10
相关产品推荐
相关产品推荐

