返回介绍

定制数据和行为

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

除了支持灵活的层级,异常类还提供了把额外状态信息存储为实例属性的功能。正如我们前面所见到的,内置异常超类提供了一个默认的构造函数,它自动把构造函数参数存储到一个名为args的实例元组属性中。尽管默认的构造函数对于很多情况都适用,但为了满足更多的定制需求,我们可以提供一个自己的构造函数。此外,类可以定义在处理器中使用的方法,来提供预先编码的异常处理逻辑。

提供异常细节

当引发一个异常的时候,可能会跨越任意的文件界限——触发异常的raise语句和捕获异常的try语句可能位于完全不同的模块文件中。在一个全局变量中存储额外的细节通常是不可行的,因为try语句可能不知道全局变量位于哪个文件中。在异常自身中传递额外的状态信息,这允许try语句更可靠地访问它。

使用类,这几乎是自动化的。正如我们已经看到的,当引发一个异常的时候,Python随着异常传递类实例对象。在try语句中的代码,可以通过在一个except处理器中的as关键字之后列出一个额外的变量,来访问引发的异常。这提供了一个自然的钩子,以用来为处理器提供数据和行为。

例如,解析数据文件的一个程序可能通过引发一个异常实例来表示一个格式化错误,而该实例用关于错误的额外细节来填充:

在这里的except子句中,对引发异常的时候所产生的实例的一个引用分配给了X变量。[1]这使得能够通过定制的构造函数来访问附加给该实例的属性。尽管我们可能依赖于内置超类的默认状态保持,它与我们的应用程序几乎不相关:

[1]正如前面所提到的,引发的实例对象通常作为sys.exc_info()调用的结果元组中的第二项是可用的——sys.exc_info()是返回有关最新引发的异常信息的一个工具。如果你没有在except子句中列出一个异常名称,但是仍然需要访问所发生的异常或者访问其附加的任何状态信息或方法,就必须使用这个接口。关于sys.exc_info的更多介绍在下一章给出。

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

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

发布评论

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