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

Python中如何分别捕获int与NoneType触发的不同TypeError异常

实现方案

Python 不支持直接在except分支中按异常的错误信息做匹配捕获,你可以通过以下两种方案实现需求:

方案1:捕获TypeError后匹配错误信息

该方案完全匹配你提供的伪代码逻辑,直接通过异常内容区分两种触发场景:

# 注意Python中空值为None,示例字典定义如下
dic = {
    "range": {"val": 1, "size": 2},
    "length": {"val": 5, "radius": 1},
    "power": None,
    "current": 5
}
list_of_keys = ["range", "length", "power", "current"]

for kw in list_of_keys:
    try:
        val_test = dic[kw]['val']
    except TypeError as e:
        err_info = str(e)
        if "'int' object is not subscriptable" in err_info:
            val_test = dic[kw]
        elif "'NoneType' object is not subscriptable" in err_info:
            val_test = "Not implemented / Not given yet"
        else:
            # 非预期的TypeError原样抛出
            raise
    print(val_test)

方案2:提前判断值类型(更稳定易维护)

你已经明确知道字典值只有字典、None、整数三类,提前做类型判断不需要依赖异常信息,不会因为Python版本迭代修改异常表述导致逻辑失效:

for kw in list_of_keys:
    current_val = dic[kw]
    if isinstance(current_val, dict):
        # 优先取val字段,不存在的话可按需调整返回逻辑
        val_test = current_val.get('val', current_val)
    elif current_val is None:
        val_test = "Not implemented / Not given yet"
    elif isinstance(current_val, int):
        val_test = current_val
    else:
        # 其他类型可按需补充处理逻辑
        val_test = current_val

两种方案的运行输出一致:

range: 1
length: 5
power: Not implemented / Not given yet
current: 5

内容的提问来源于stack exchange,提问作者PJ Drop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:48:02