如何实现Python异常处理机制

  介绍

这篇文章主要讲解了如何实现Python异常处理机制,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

要了解试除异常处理的用法,简单来说,当位于试块中的程序执行出现异常时,会将该种异常捕获,同时找到对应的除了块处理该异常,那么这里就有一个问题,它是如何找到对应的除了块的呢?

我们知道,一个试块也可以对应多个除了块,一个除了块可以同时处理多种异常。如果我们想使用一个除了块处理所有异常,就可以这样写:

尝试:#……除了例外:#……

这种情况下,对于试块中可能出现的任何异常,Python解释器都会交给仅有的这个除了块处理,因为它的参数是例外,表示可以接收任何类型的异常。

注意,对于可以接收任何异常的除了来说,其后可以跟异常,也可以不跟任何参数,但表示的含义都是一样的。

这里就要详细介绍一下例外。要知道,为了表示程序中可能出现的各种异常,Python提供了大量的异常类,这些异常类之间有严格的继承关系,图1显示了Python的常见异常类之间的继承关系。

如何实现Python异常处理机制

从图1中可以看的出,BaseException是Python中所有异常类的基类,但对于我们来说,最主要的是异常类,因为程序中可能出现的各种异常,都继承自例外。

因此,如果用户要实现自定义异常,不应该继承BaseException,而应该继承异常类。关于如何自定义一个异常类,可阅读《Python自定义异常类》一节。

当试块捕获到异常对象后,Python解释器会拿这个异常类型依次和各个除了块指定的异常类进行比较,如果捕获到的这个异常类,和某个除了块后的异常类一样,又或者是该异常类的子类,那么Python解释器就会调用这个除了块来处理异常;反之,Python解释器会继续比较,直到和最后一个除了比较完,如果没有比对成功,则证明该异常无法处理。

图2演示了位于试块中的程序发生异常时,从捕获异常到处理异常的整个流程。

如何实现Python异常处理机制

下面看几个简单的异常捕获的例子:

试题:=int(输入(“输入答:“))   b=int(输入(“输入乙:“))   打印(a/b)   除了ValueError:   print(“数值错误:程序只能接收整数参数“)   除了ArithmeticError:   print(“算术错误“)   除了例外:   print(“未知异常“)

该程序中,根据用户输入a和b值的不同,可能会导致ValueError, ArithmeticError异常:

    <李>如果用户输入的一个或者b是其他字符,而不是数字,会发生ValueError异常,试块会捕获到该类型异常,同时Python解释器会调用第一个除了块处理异常; <李>如果用户输入的a和b是数字,但b的值为0,由于在进行除法运算时除数不能为0,因此会发生ArithmeticError异常,试块会捕获该异常,同时Python解释器会调用第二个除了块处理异常; <李>当然,程序运行过程中,还可能由于其他因素出现异常,试块都可以捕获,同时Python会调用最后一个除了块来处理。

当一个试块配有多个除了块时,这些除了块应遵循这样一个排序规则,即可处理全部异常的除了块(参数为异常,也可以什么都不写)要放到所有除了块的后面,且所有父类异常的除了块要放到子类异常的除了块的后面。

看完上述内容,是不是对如何实现Python异常处理机制有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。

如何实现Python异常处理机制