Python批量提取XML文件数据时出现KeyError: 'Value'问题求助
问题原因
你遇到的KeyError: 'Value'报错由两个潜在问题导致:
- 部分XML文件中
patientRole节点下不存在telecom子节点,find()方法返回None后强行取属性直接报错 - 部分
telecom节点未携带value属性,直接通过[]取不存在的键触发报错
你现有的批量遍历文件逻辑已经是对的,只要增加容错判断即可适配100份文件的批量提取需求。
修正后可运行代码
import os import xml.etree.ElementTree as ET # 预定义命名空间,避免重复写长串URN NS = {'hl7': 'urn:hl7-org:v3'} path = 'C:\\Users\\Downloads\\files' for filename in os.listdir(path): if not filename.endswith('.xml'): continue fullname = os.path.join(path, filename) tree = ET.parse(fullname) # 遍历所有patientRole节点 for leads in tree.findall('.//hl7:patientRole', namespaces=NS): # 先判断telecom节点是否存在 telecom_node = leads.find('hl7:telecom', namespaces=NS) if telecom_node is not None: # 用get方法取属性,不存在则返回默认值,避免KeyError number = telecom_node.attrib.get('value', '未查询到联系电话') # 可按需加文件名输出,方便定位对应文件 print(f"{filename}: {number}")
优化说明
- 用命名空间字典简化节点查询写法,降低代码冗余
- 增加节点存在性判断,避免空节点取值报错
- 用
dict.get()方法取属性,替代直接用[]取值,彻底解决属性不存在导致的KeyError问题 - 输出关联文件名,方便你定位提取结果对应的源文件
内容的提问来源于stack exchange,提问作者booleantrue
相关产品推荐
相关产品推荐

