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

Python中如何使用if语句根据条件抛出特定异常

问题解答

该需求完全可以实现。你当前提交的代码存在逻辑、语法层面的多处问题,修正后即可实现「仅指定判断条件成立时抛出对应自定义异常」的效果。

原代码问题梳理

  • 异常触发逻辑倒置:调用user.load()时,如果目标IAM用户不存在,boto3会直接抛出内置的NoSuchEntityException,中断后续代码执行,根本不会走到你写的if判断分支;你写的if verif.exceptions.NoSuchEntityException:属于恒成立判断,没有任何实际校验作用。
  • 变量未定义:代码中使用的ex变量没有对应赋值逻辑,运行时会直接抛出NameError导致程序崩溃。
  • 基础语法错误:自定义异常未提前继承Python内置的Exception基类,无法正常抛出使用;两个except块后没有编写任何处理逻辑,会直接触发语法报错。

可直接运行的修正代码

import boto3

# 先定义自定义异常类,必须继承Exception基类
class Userdoesnotexist(Exception):
    pass

class Userexists(Exception):
    pass

def lambda_handler(event, context):
    iam_resource = boto3.resource('iam')
    target_user = iam_resource.User('Tom')
    try:
        target_user.load()
        # 能走到这行说明load()调用未抛错,用户真实存在
        raise Userexists
    except iam_resource.exceptions.NoSuchEntityException:
        # 捕获到boto3抛出的不存在异常,说明用户不存在
        raise Userdoesnotexist
    except Userdoesnotexist:
        # 这里写用户不存在时的业务处理逻辑
        return {"statusCode": 404, "message": "User Tom does not exist"}
    except Userexists:
        # 这里写用户已存在时的业务处理逻辑
        return {"statusCode": 200, "message": "User Tom already exists"}

扩展说明

如果后续需要新增更多判断条件、对应更多自定义异常,只需要在对应代码位置先做条件校验,确认条件满足后再执行raise 目标异常类即可,完全可以做到精准抛出对应异常,不会出现误触发的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:27:13