Python 异常的捕获、异常的传递与主动抛出异常操作示例

  • Post category:Python

Python 异常的捕获、异常的传递与主动抛出异常是 Python 编程中非常重要的概念。在编写代码时,可能会出现各种各样的错误,这些错误可能是语法错误、运行时错误或逻辑错误。如果不对这些错误进行处理,程序就不能正常运行,甚至会崩溃。下面通过一些示例来详细讲解异常的捕获、异常的传递与主动抛出异常。

Python 异常的捕获

在 Python 中,当程序发生错误时,它会抛出一个异常。异常可以是内置的,也可以是自定义的。我们可以使用 try-except 语句来捕获并处理这些异常。

try:
    # 程序代码
    pass
except Exception as e:
    # 处理异常
    pass

在上面的代码中,try 语句包含可能触发异常的程序代码。如果程序代码执行期间发生异常,Python 将跳转到 except 块,并执行其中的代码。Exception 是所有 Python 异常的基类,我们可以使用 as 关键字指定一个变量来捕获异常描述信息。在 except 块中处理异常后,程序将继续运行。

以下代码示例演示了如何捕获 IndexError 异常:

try:
    lst = [1,2,3]
    print(lst[5])
except IndexError as e:
    print("索引错误:", e)

运行结果为:

索引错误: list index out of range

Python 异常的传递

当程序中的函数遇到异常时,它可以将异常传递给外部调用方。我们可以使用 raise 语句来抛出异常。简单地说,Python 中的 raise 语句使我们能够在程序运行时主动抛出异常。

以下代码示例演示了如何在函数中抛出异常和传递异常:

def divide(x, y):
    if y == 0:
        raise ZeroDivisionError("division by zero")
    return x / y

try:
    result = divide(10, 0)
except ZeroDivisionError as e:
    print("错误信息:", e)

运行结果为:

错误信息: division by zero

在上面的示例中,当变量 y 的值为 0 时,函数抛出了 ZeroDivisionError 异常。在主程序中,我们使用 try-except 语句来捕获和处理 ZeroDivisionError 异常。

Python 主动抛出异常

除了由程序运行时引发异常外,我们还可以在程序中使用 raise 关键字来主动抛出异常。

以下代码示例演示了如何主动抛出自定义异常:

class MyError(Exception):
    def __init__(self, message):
        self.message = message

    def __str__(self):
        return self.message

try:
    raise MyError("自定义错误信息")
except MyError as e:
    print("错误信息:", e)

运行结果为:

错误信息: 自定义错误信息

在上面的示例中,我们定义了一个自定义异常类 MyError。在主程序中,我们使用 raise 关键字来主动抛出 MyError 异常,并使用 try-except 语句来捕获和处理异常。

END