6.异常

七言 2025-8-1 118 8/1

[TOC]

异常

  • 定义:当python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的'异常'

    捕获异常

  • 在Python中,处理异常(也称为错误)的主要机制是使用try和except语句

    基本语法

    try:
    可能发生错误的代码
    except 异常类型:
    如果捕获到该异常类型执行的代码

    示例

    try:
        # 尝试执行的代码块
        result = 10 / 0  # 这里会抛出一个ZeroDivisionError
    except ZeroDivisionError:
        # 如果在try块中发生了ZeroDivisionError异常,则执行这里的代码
        print("除数不能为零!")

  • 捕获所有类型的异常或者多个异常类型

    示例

    try:
        # 尝试执行的代码块
        result = 10 / int('a')  # 这里会抛出一个ValueError
    except (ValueError, ZeroDivisionError):
        # 捕获ValueError或ZeroDivisionError异常
        print("发生了一个错误!")
    except Exception as e:
        # 捕获所有其他类型的异常
        print(f"发生了一个未知错误:{e}")

    * Exception是所有程序异常类的父类

    异常的finally

  • finally子句来指定无论是否发生异常都会执行的代码

    示例

    try:
        # 尝试执行的代码块
        result = 10 / 5  # 这里不会抛出异常
    except ZeroDivisionError:
        print("除数不能为零!")
    finally:
        # 这里的代码总是会被执行
        print("清理资源...")

    异常的else

  • else子句来编写在没有异常发生时才执行的代码

    示例

    try:
        # 尝试执行的代码块
        result = 10 / 5  # 这里不会抛出异常
    except ZeroDivisionError:
        print("除数不能为零!")
    else:
        # 如果没有异常发生,这里的代码会被执行
        print(f"结果是:{result}")
    finally:
        # 这里的代码总是会被执行
        print("清理资源...")

    抛出异常

  • 异常抛出,当有一些异常自己处理不了或者不想处理,需要向调用方抛出
  • 手动抛出异常,需要使用raise语句,后跟异常类名或异常类的实例

    抛出内置异常

  • 抛出Python内置的异常类型,如ValueError,TypeError,IOError等

    示例

    # 如果discount大于100,就会抛出一个ValueError异常
     
    def apply_discount(product,discount):
        if discount > 100:
            raise ValueError('折扣百分比不能超过100')
        final_price = product.price * (1.0 - discount / 100)
        return final_price

    raise

  • raise 是一个关键字,用于抛出(raise)一个异常(exception)。当 raise 语句被执行时,它会立即停止当前代码的执行,并将控制权传递给最近的 try-except 块或 finally 子句
  • raise 可以用来抛出一个已有的异常,或者创建一个新的异常并抛出

    引发自定义异常

    示例

    age = -10
     
    if age < 0:
        raise ValueError("年龄不能为负数")
     
    print("Age:", age)

    在try...except...块中重新引发捕获的异常

    示例

    def divide(a, b):
        try:
            result = a / b
        except ZeroDivisionError as e:
            print("除数不能为零!")
            raise  # 使用不带参数的raise重新引发异常
        return result
     
    try:
        print(divide(10, 0))
    except ZeroDivisionError as e:
        print("捕获到异常:", e)

    * 在divide函数中捕获了ZeroDivisionError异常,并在except块中使用不带参数的raise重新引发了它。这意味着异常将被传递回调用divide函数的代码,并在那里被捕获和处理。

- THE END -

七言

8月01日16:49

最后修改:2025年8月1日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论