Python XML转JSON场景下如何抛出指定自定义异常
你之前的写法报错是因为Python语法不支持在字典字面量的键值对声明中嵌入try-except代码块,以下是两种可行的实现方案:
方案1:提前单独解析字段(可读性最高)
将字段解析逻辑拆到字典声明外单独处理,覆盖所有异常场景后再组装数据存入结果:
# 解析multiplier整数字段 try: multiplier_node = element.findall(r'Multiplier')[0] multiplier = int(multiplier_node.text) except (IndexError, AttributeError, ValueError): # 覆盖找不到节点、节点无text属性、转整数失败三类异常 raise XMLIntegerParsingError() # 解析enabled布尔字段 try: enabled_raw = element.attrib['enabled'] enabled = bool(enabled_raw) except (KeyError, ValueError): # 覆盖属性不存在、转布尔失败两类异常 raise XMLBooleanParsingError() # 组装字典后存入结果 result['answer'].append({ 'multiplier': multiplier, 'enabled': enabled, 'symbols': sym })
方案2:封装解析工具函数(适合多场景复用)
如果项目中多处需要解析XML的布尔、整数字段,可以把逻辑封装成独立函数,直接在字典中调用即可:
# 定义通用解析函数 def parse_xml_int(raw_val): try: return int(raw_val) except (TypeError, ValueError): raise XMLIntegerParsingError() def parse_xml_bool(raw_val): # 额外适配XML常见布尔值格式,避免bool("false")直接返回True的问题 if isinstance(raw_val, str): lower_val = raw_val.strip().lower() if lower_val in ("true", "1"): return True elif lower_val in ("false", "0"): return False raise XMLBooleanParsingError() # 直接在字典中调用函数 result['answer'].append({ 'multiplier': parse_xml_int(element.findall(r'Multiplier')[0].text), 'enabled': parse_xml_bool(element.attrib['enabled']), 'symbols': sym })
内容的提问来源于stack exchange,提问作者user14899645
相关产品推荐
相关产品推荐

