Python读取文件中数值ID访问字典时报KeyError: '16977'问题求助
问题成因
- 核心原因是键的类型和格式不匹配:
imgToGTS的键来自COCO标注的ann['image_id'],是整数类型(比如示例中的16977);而从id.txt逐行读取的内容默认是字符串类型,且会携带每行末尾的换行符\n,你实际用来查找的键是字符串'16977'或者'16977\n',和整数16977是完全不同的字典键,Python无法匹配就会抛出KeyError。 - 错误信息
KeyError: '16977'中键带引号,也直接证明了查找的是字符串类型的键,和字典中存储的整数键不对应。
解决方法
读取文件内容时先做清洗和类型转换,再用于字典查找,同时推荐用with上下文管理器自动管理文件句柄,避免文件泄漏:
def calculate_metrics(GTS,RES): gts = {} with open("id.txt", 'r') as f: for line in f: # strip()去掉首尾的换行符、空格等空白字符,再转成整数 imgId = int(line.strip()) gts[imgId] = imgToGTS[imgId] print(imgToGTS[imgId])
如果需要兼容id.txt中存在无效id的场景,可以增加存在性判断做容错:
def calculate_metrics(GTS,RES): gts = {} with open("id.txt", 'r') as f: for line in f: imgId = int(line.strip()) if imgId in imgToGTS: gts[imgId] = imgToGTS[imgId] print(imgToGTS[imgId]) else: print(f"警告:id {imgId} 不在标注数据中,已跳过")
内容的提问来源于stack exchange,提问作者Lei
相关产品推荐
相关产品推荐

