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
相关产品推荐
相关产品推荐

