【Python】之raise函数用法口诀

一、口诀速记

主动触发用raise,异常类型别乱选  
内置异常优先用,自定义类更灵活  
重抛异常不加参,异常链条要关联  
传递信息加描述,性能消耗需谨慎  
断言assert有区别,生产环境更推荐

二、逐句解析

口诀句 对应知识点 代码示例
主动触发用raise 主动中断程序流,替代返回错误码 if x<0: raise ValueError
异常类型别乱选 匹配错误场景(如TypeError类型错误,KeyError键缺失) raise TypeError("需数字类型")
内置异常优先用 Python内置60+异常类型优先选用 raise FileNotFoundError(...)
自定义类更灵活 继承Exception类创建业务异常 class PaymentError(Exception): pass
重抛异常不加参 except块中用raise不带参数重抛原始异常 except ValueError: raise
异常链条要关联 Python 3.11+支持raise NewExc from OldExc显式关联异常 raise DBError from ConnectionError
传递信息加描述 异常信息需明确,可用f-string动态插入变量 raise LoginError(f"用户{username}认证失败")
性能消耗需谨慎 异常处理成本高,避免在循环中频繁触发 高频循环内用if-return替代raise
断言assert有区别 assert用于调试,-O优化时被禁用;raise始终生效 assert len(data)>0 → 生产环境可能失效
生产环境更推荐 关键业务逻辑强制使用raise保证错误必现 支付失败必抛PaymentErro

 ‌三、实战场景口诀应用

# 场景:用户注册验证
def register_user(username, password):
    if not re.match(r"^[a-zA-Z0-9_]{3,20}$", username):
        raise InvalidFormatError("用户名格式非法")  # ✅ 内置异常优先用
    
    if len(password) < 12:
        raise SecurityPolicyError("密码需12位以上")  # ✅ 自定义类更灵活
    
    try:
        save_to_database(user_data)  # ✅ 异常链条要关联
    except DatabaseTimeout as e:
        raise ServiceUnavailable("系统繁忙") from e

# ✅ 断言assert有区别:测试环境验证假设
assert config.DEBUG_MODE, "需开启调试模式"

你可能感兴趣的:(python)