返回介绍

raise 语句

发布于 2024-01-29 22:24:15 字数 1662 浏览 0 评论 0 收藏 0

要显式地触发异常,可以使用raise语句,其一般形式相当简单。raise语句的组成是:raise关键字,后面跟着可选的要引发的类或者类的一个实例:

正如前面所介绍的,在Python 2.6和Python 3.0中异常总是类的实例。因此,这里第一个raise形式是最常见的,我们直接提供一个实例,要么是在raise之前创建的,要么是raise语句中自带的。如果我们传递一个类,Python调用不带构造函数参数的类,以创建被引发的一个实例;这个格式等同于在类引用后面添加圆括号。最后的形式重新引发最近引发的异常;它通常用于异常处理器中,以传播已经捕获的异常。

为了更清楚,让我们看一些示例。对于内置异常,如下两种形式是对等的,都会引发指定的异常类的一个实例,但是,第一种形式隐式地创建实例:

我们也可以提前创建实例——因为raise语句接受任何类型的对象引用,如下的两个示例像前两个一样引发了IndexError:

当引发一个异常的时候,Python把引发的实例与该异常一起发送。如果一个try包含了一个名为except name as X:子句,变量X将会分配给引发中所提供的实例:

as在try处理器中是可选的(如果忽略它,该实例直接不会分配给一个名称),但是,包含它将使得处理器能够访问实例中的数据以及异常类中的方法。

这种模式对于我们用类编写的用户定义的异常也同样有效——例如,如下的代码,传递异常类构造函数参数,该参数通过分配的实例在处理器中变得可用:

由于这涉及下一章的话题,我们将在下一章中详细介绍。

不管你如何指定异常,异常总是通过实例对象来识别,并且大多数时候在任意给定的时刻激活。一旦异常在程序中某处由一条except子句捕获,它就死掉了(例如,不会传递到另一个try),除非由另一个raise语句或错误重新引发它。

利用raise传递异常

raise语句不包括异常名称或额外数据值时,就是重新引发当前异常。如果需要捕捉和处理一个异常,又不希望异常在程序代码中死掉时,一般就会使用这种形式。

通过这种方式执行raise时,会重新引发异常,并将其传递给更高层的处理器(或者顶层的默认处理器,它会停止程序,打印标准出错消息)。注意我们传递给异常类的参数是如何出现在出错消息中的,我们将在下一章中了解为什么会这样。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文