Python异常对象Exception基础类异常捕捉

  • Post category:Python

Python中的异常处理机制允许我们在代码运行过程中捕获并处理异常,从而使程序可以更加健壮和稳定。其中,异常对象Exception是Python中所有异常对象的基础类,所有的异常类都派生自该类。下面就详细讲解一下Python异常对象Exception基础类异常捕捉的完整攻略。

什么是Python异常对象Exception基础类

Python中的异常处理机制允许我们在代码运行过程中捕获并处理异常,异常对象Exception是Python中所有异常对象的基础类,所有的异常类都派生自该类。在程序中如果发生了异常,会抛出一个 Exception 对象,这个异常对象包含了有关异常的信息。我们可以通过捕获异常对象 Exception,来实现自定义异常处理。

异常捕获的基本语法

根据Python的异常处理机制,当程序发生一个异常时,Python会在当前代码所在的函数内停止代码的继续执行,并抛出一个Exception异常对象。我们可以通过在代码中使用try…except语句,在try语句块中执行代码,在except语句块中捕获Exception异常对象并做出相应的处理。

下面是一个例子,我们来理解一下异常捕获的基本语法:

try:
    # 可能会抛出异常的代码块
except Exception as e:
    # 异常捕获处理逻辑

在上面的代码中,try语句块包含可能会抛出异常的代码块,在except语句块中,我们通过except关键字加上Exception类名来捕捉Exception异常对象e,并在except语句块中做出相应的处理。

捕捉指定类型的异常对象

在实际应用中,我们可能只想捕捉特定类型的异常对象而非所有的异常对象。为此,我们可以在except关键字后面加上具体的异常类型,如下所示:

try:
    # 可能会抛出异常的代码块
except TypeError as te:
    # 当捕捉到TypeError异常时执行该块
except ValueError as ve:
    # 当捕捉到ValueError异常时执行该块
else:
    # 当try语句块中代码没有引发异常时执行该块
finally:
    # 不管try语句块中是否引发异常,都会执行该块

在上面的代码中,我们在except关键字后面加上了具体的异常类型,如TypeError和ValueError。这样,我们就只会捕捉到这2种类型的异常对象。同样的,我们还可以使用else和finally关键字来处理try语句块中的代码。

示例说明

下面给出2个示例,分别说明了异常捕捉的基本语法以及捕捉指定类型的异常对象。

示例1:基本语法

假设我们的程序中有一个函数divide,用于两个数相除:

def divide(x, y):
    result = x / y
    return result

然后我们在使用divide函数时,会传入一些参数,在某些情况下,这些参数会导致ZeroDivisionError异常对象的抛出。为了避免程序崩溃,我们需要在程序中捕捉并处理这个异常对象。下面是代码示例:

try:
    result = divide(1, 0)
except ZeroDivisionError as zde:
    print("除数不能为0")
else:
    print("除法运算的结果是:", result)
finally:
    print("程序执行完毕")

在上面的代码中,我们调用了divide函数,并传入了1和0,这样会导致ZeroDivisionError异常对象的抛出。然后我们使用try语句块来捕捉这个异常对象,并在except语句块中做出相应的处理。最后,我们使用else和finally关键字来处理try语句块中的代码。

示例2:捕捉指定类型的异常对象

假设我们想编写一个程序,用于读取指定的文件并计算其中所有数字的和。在读取文件时,可能会发生文件不存在或无法打开的异常,我们需要在程序中捕捉并处理这些异常。下面是代码示例:

filename = "test.txt"
try:
    with open(filename) as f:
        lines = f.readlines()
        total = sum([int(x.strip()) for x in lines])
except FileNotFoundError as fnfe:
    print(f"文件{filename}不存在")
except OSError as oe:
    print(f"文件{filename}无法打开")
else:
    print(f"文件{filename}中所有数字的和是:{total}")
finally:
    print("程序执行完毕")

在上面的代码中,我们使用with…as语句来打开指定的文件,然后将文件中的所有数字相加,最后输出结果。如果文件不存在或无法打开,代码会抛出相应的异常对象,我们使用try…except语句块来捕捉这些异常对象,并在except语句块中做出相应的处理。最后我们使用else和finally关键字来处理try语句块中的代码。