You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:48:01