学科分类
目录
基础

异常的传递

如果程序中的异常没有被处理,默认情况下会将该异常传递给上一级,如果上一级仍然没有处理,那么会继续向上传递,直至异常被处理或程序崩溃。

接下来,使用一个计算正方形面积的实例来演示异常的传递,该实例由get_width()、calc_area()与show_area()三个函数组成,其中get_width()函数用于计算正方形边长,calc_area()函数用于计算正方形面积,show_area()函数用于展示计算的正方形结果。具体代码如下:

def get_width():       # 计算边长
    print("get_width开始执行")
    num = int(input("请输入除数:"))
    width_len = 10 / num  # 发生异常
    print("get_width执行结束")
    return width_len
def calc_area():       # 计算正方形面积
    print("calc_area开始执行")
    width_len = get_width()
    print("calc_area执行结束")
    return width_len * width_len
def show_area():      # 数据展示
    try:
        print("show_area开始执行")
        area_val = calc_area()
        print(f"正方形的面积是:{area_val}")
        print("show_area执行结束")
    except ZeroDivisionError as e:
        print(f"捕捉到异常:{e}")
if ``__name__ ``== '``__main__``':
    show_area()

上述代码中的函数show_area()为程序入口,该函数调用函数calc_area(),函数calc_area()调用函数get_width()。

get_width()函数使用变量num接收用户输入的除数,通过语句width_len = 10 /num计算正方形的边长,如果用户输入的num值为0,那么程序会引发ZeroDivisionError异常。因为get_width()函数中并没有捕获异常的语句,所以get_width()函数中的异常向上传递到calc_area()函数,而calc_area()函数中也没有捕获异常信息的语句,只能将异常信息继续向上传递给show_area()函数。

show_area()函数中设置了异常捕获语句try-except,当它接收到由calc_area()函数传递来的异常后,会通过try-except捕获到异常信息。

运行程序,根据提示输入0,结果如下所示:

show_area开始执行
calc_area开始执行
get_width开始执行
请输入除数:0
捕捉到异常:division by zero
点击此处
隐藏目录