Python内置函数之raise函数详解与实战案例

作者:

文章目录
  • raise [Exception [, args [, traceback]]] Exception:必需,异常类(如 ValueError、TypeError)。 args:可选,传递给异常的参数(通常是错误信息)。 traceback:可选,异常的堆栈跟踪对象(极少使用)。
  • Python 内置了数十种异常类,常见的有: ValueError:参数值不合法 TypeError:类型不匹配 IndexError:索引超出范围 KeyError:字典键不存在 FileNotFoundError:文件不存在 示例 1:值错误 def divide(a, b): if b == 0: raise ValueError(“除数不能为零”) return a / b try: result = divide(10, 0) except ValueError as e: print(f”错误: {e}”) # 输出: 错误: 除数不能为零 示例 2:类型错误 def greet(name): if not isinstance(name, str): raise TypeError(“name 必须是字符串”) print(f”Hello, {name}”) greet(123) # 抛出 TypeError
  • 通过继承 Exception 类创建自定义异常,增强代码可读性。 步骤 1:定义异常类 class InvalidEmailError(Exception): “””邮箱格式错误””” def __init__(self, email, message=”邮箱格式不正确”): self.email = email self.message = message super().__init__(self.message) def __str__(self): return f”{self.email} -> {self.message}” 步骤 2:使用自定义异常 def validate_email(email): if “@” not in email: raise InvalidEmailError(email) return email try: validate_email(“test.com”) except InvalidEmailError as e: print(f”验证失败: {e}”) # 输出: 验证失败: test.com -> 邮箱格式不正确
  • 使用 raise from 保留原始异常信息,形成异常链。 示例:多层异常捕获 def parse_int(s): try: return int(s) except ValueError as e: # 保留原始错误并抛出新异常 raise TypeError(“无法将输入转换为整数”) from e try: parse_int(“abc”) except TypeError as e: print(f”外层错误: {e}”) print(f”原始错误: {e.__cause__}”) 输出: 外层错误: 无法将输入转换为整数原始错误: invalid literal for int() with base 10: 'abc'
  • 具体异常优先:抛出具体的异常类(如 ValueError),而非通用的 Exception。 异常信息明确:提供足够的上下文信息,便于调试。 避免过度使用:仅在真正异常的情况下使用 raise,不要替代正常的条件判断。 异常处理:在适当的层级捕获并处理异常,避免程序崩溃。
  • 遗漏异常参数: raise ValueError # 正确:raise ValueError() 异常链断裂: try: 1 / 0 except ZeroDivisionError: raise ValueError(“自定义错误”) # 丢失原始错误信息 # 应使用:raise ValueError(“自定义错误”) from e 通过合理使用 raise,可以构建更健壮、更易于维护的 Python 程序。异常处理是高级编程的必备技能,建议结合 try-except-finally 语句一起学习。 到此这篇关于Python内置函数之raise函数详解与实战案例的文章就介绍到这了,更多相关python raise函数内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python语法 raise … from 用法示例详解 Python主动抛出异常及raise关键字的用法 Python中的raise关键字详解 python 中raise用法 Python抛出引发异常(raise)知识点总结 Python 使用 raise 语句抛出异常的流程分析 python 自定义异常和主动抛出异常(raise)的操作 python raise的基本使用 Python新手学习raise用法
  • 目录
    • 一、基本语法
    • 二、抛出内置异常
    • 三、自定义异常
    • 四、异常链与raise from
    • 五、实战场景
      • 1.输入验证
      • 2.接口适配
      • 3.状态检查
      • 4.替代返回错误码
    • 六、最佳实践
      • 七、常见错误

        在 Python 中,raise 语句用于主动抛出异常,是错误处理机制的核心组成部分。以下是关于 raise 的详细解析和实战案例。

        raise [Exception [, args [, traceback]]]
        • Exception:必需,异常类(如 ValueErrorTypeError)。
        • args:可选,传递给异常的参数(通常是错误信息)。
        • traceback:可选,异常的堆栈跟踪对象(极少使用)。

        Python 内置了数十种异常类,常见的有:

        • ValueError:参数值不合法
        • TypeError:类型不匹配
        • IndexError:索引超出范围
        • KeyError:字典键不存在
        • FileNotFoundError:文件不存在

        示例 1:值错误

        def divide(a, b):
            if b == 0:
                raise ValueError("除数不能为零")
            return a / b
        try:
            result = divide(10, 0)
        except ValueError as e:
            print(f"错误: {e}")  # 输出: 错误: 除数不能为零

        示例 2:类型错误

        def greet(name):
            if not isinstance(name, str):
                raise TypeError("name 必须是字符串")
            print(f"Hello, {name}")
        greet(123)  # 抛出 TypeError

        通过继承 Exception 类创建自定义异常,增强代码可读性。

        步骤 1:定义异常类

        class InvalidEmailError(Exception):
            """邮箱格式错误"""
            def __init__(self, email, message="邮箱格式不正确"):
                self.email = email
                self.message = message
                super().__init__(self.message)
            def __str__(self):
                return f"{self.email} -> {self.message}"

        步骤 2:使用自定义异常

        def validate_email(email):
            if "@" not in email:
                raise InvalidEmailError(email)
            return email
        try:
            validate_email("test.com")
        except InvalidEmailError as e:
            print(f"验证失败: {e}")  # 输出: 验证失败: test.com -> 邮箱格式不正确

        使用 raise from 保留原始异常信息,形成异常链。

        示例:多层异常捕获

        def parse_int(s):
            try:
                return int(s)
            except ValueError as e:
                # 保留原始错误并抛出新异常
                raise TypeError("无法将输入转换为整数") from e
        try:
            parse_int("abc")
        except TypeError as e:
            print(f"外层错误: {e}")
            print(f"原始错误: {e.__cause__}")

        输出:

        外层错误: 无法将输入转换为整数
        原始错误: invalid literal for int() with base 10: 'abc'

        def register_user(age):
            if age < 18:
                raise ValueError("必须年满18岁才能注册")
            # 注册逻辑...

        def fetch_data(url):
            response = requests.get(url)
            if response.status_code != 200:
                raise ConnectionError(f"请求失败: {response.status_code}")
            return response.json()

        class BankAccount:
            def __init__(self, balance):
                self.balance = balance
            def withdraw(self, amount):
                if amount > self.balance:
                    raise RuntimeError("余额不足")
                self.balance -= amount

        # 不推荐:返回错误码
        def divide(a, b):
            if b == 0:
                return None, "除数不能为零"
            return a / b, None
        # 推荐:抛出异常
        def divide(a, b):
            if b == 0:
                raise ValueError("除数不能为零")
            return a / b

        1. 具体异常优先:抛出具体的异常类(如 ValueError),而非通用的 Exception
        2. 异常信息明确:提供足够的上下文信息,便于调试。
        3. 避免过度使用:仅在真正异常的情况下使用 raise,不要替代正常的条件判断。
        4. 异常处理:在适当的层级捕获并处理异常,避免程序崩溃。

        • 遗漏异常参数
        raise ValueError  # 正确:raise ValueError()

        异常链断裂

        try:
            1 / 0
        except ZeroDivisionError:
            raise ValueError("自定义错误")  # 丢失原始错误信息
        # 应使用:raise ValueError("自定义错误") from e

        通过合理使用 raise,可以构建更健壮、更易于维护的 Python 程序。异常处理是高级编程的必备技能,建议结合 try-except-finally 语句一起学习。

        到此这篇关于Python内置函数之raise函数详解与实战案例的文章就介绍到这了,更多相关python raise函数内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

        您可能感兴趣的文章:

        • Python语法 raise … from 用法示例详解
        • Python主动抛出异常及raise关键字的用法
        • Python中的raise关键字详解
        • python 中raise用法
        • Python抛出引发异常(raise)知识点总结
        • Python 使用 raise 语句抛出异常的流程分析
        • python 自定义异常和主动抛出异常(raise)的操作
        • python raise的基本使用
        • Python新手学习raise用法

        站内搜索