- 译者序
- 前言
- 第1章 问答环节
- 第2章 Python 如何运行程序
- 第3章 如何运行程序
- 第4章 介绍 Python 对象类型
- 第5章 数字
- 第6章 动态类型简介
- 第7章 字符串
- 第8章 列表与字典
- 第9章 元组、文件及其他
- 第10章 Python 语句简介
- 第11章 赋值、表达式和打印
- 第12章 if 测试和语法规则
- 第13章 while 和 for 循环
- 第14章 迭代器和解析,第一部分
- 第15章 文档
- 第16章 函数基础
- 第17章 作用域
- 第18章 参数
- 第19章 函数的高级话题
- 第20章 迭代和解析,第二部分
- 第21章 模块:宏伟蓝图
- 第22章 模块代码编写基础
- 第23章 模块包
- 第24章 高级模块话题
- 第25章 OOP:宏伟蓝图
- 第27章 更多实例
- 第28章 类代码编写细节
- 第29章 运算符重载
- 第30章 类的设计
- 第31章 类的高级主题
- 第32章 异常基础
- 第34章 异常对象
- 第35章 异常的设计
- 第36章 Unicode 和字节字符串
- 字符串基础知识
- Python 的字符串类型
- 文本和二进制文件
- Python 3.0 中的字符串应用
- 转换
- 编码 Unicode 字符串
- 编码非ASCII文本
- 编码和解码非ASCII文本
- 其他 Unicode 编码技术
- 转换编码
- 在 Python 2.6 中编码 Unicode 字符串
- 源文件字符集编码声明
- 使用 Python 3.0 Bytes 对象
- 序列操作
- 创建 bytes 对象的其他方式
- 混合字符串类型
- 使用 Python 3.0(和 Python 2.6)bytearray 对象
- 使用文本文件和二进制文件
- Python 3.0 中的文本和二进制模式
- 类型和内容错误匹配
- 使用 Unicode 文件
- 在 Python 3.0 中处理 BOM
- Python 2.6 中的 Unicode 文件
- Python 3.0 中其他字符串工具的变化
- Struct二进制数据模块
- pickle对象序列化模块
- XML解析工具
- 本章小结
- 本章习题
- 习题解答
- 第37章 管理属性
- 第38章 装饰器
- 第39章 元类
- 附录A 安装和配置
- 附录B 各部分练习题的解答
- 作者介绍
- 封面介绍
第34章 异常对象
基于类的异常有如下特点。
·提供类型分类,对今后的修改有更好的支持。以后增加新异常时,通常不需要在try语句中进行修改。
·它们附加了状态信息。异常类提供了存储在try处理器中所使用的环境信息的合理地点:这样的话,可以拥有状态信息以及可调用的方法,并且可以通过实例进行读取。
·它们支持继承。基于类的异常允许参与继承层次,从而可以获得并定制共同的行为。例如,继承的显示方法可提供通用的出错消息的外观。
因为有这些差异,所以基于类的异常支持了程序的演进和较大系统,事实上,所有内置异常都是类组织成继承树,其原因就是刚才所说的。也可以对用户定义的异常做相同的事。
在Python 3.0中,用户定义的异常继承自内置异常超类。正如我们将在这里介绍的,由于这些超类为打印和状态保持提供了有用的默认值,所以编写用户定义的异常的任务也涉及理解这些内置超类的作用。
注意:版本差异提示:Python 2.6和Python 3.0都要求异常通过类来定义。此外,Python 3.0要求异常类派生自BaseException内置异常超类,而不管是直接还是间接。正如我们将看到的,大多数程序都继承自这个类的Exception子类,以支持针对常规异常类型的全捕获处理器——在一个处理器中指定它将会捕获大多数程序应该捕获的所有内容。Python 2.6也允许独立的标准类来充当异常,但是,它要求新式类派生自内置异常类,这与Python 3.0相同。
异常:回到未来
曾经(在Python 2.6和Python 3.0之前)可以以两种不同的方式来定义异常。这通常使得try语句、raise语句和Python复杂化。如今,只有一种方式来定义异常。这是件好事情:它从语言中删除了为了实现向后兼容而保留的大量冗余内容。由于旧的方式有助于说明为什么异常成为今天的样子,并且,由于真的不可能完全擦除上百万人使用了近二十年的教程的历史,所以让我们先来简单看看异常的过去。
字符串异常很简单
在Python 2.6和Python 3.0之前,可以使用类实例和字符串对象来定义异常。基于字符串的异常在Python 2.5中就发布了废弃警告,并且在Python 2.6和Python 3.0中删除了,因此,今天你应该使用基于类的异常,就像本书中所介绍的那样。如果你使用遗留代码,可能还会遇到字符串异常。它们也可能会出现在几年前(这在Python的纪年中应该算作是不朽了)编写的教程和Web资料中。
字符串异常很容易使用——任何字符串都可以做到,它们根据对象标识来匹配,而不是根据值(也就是说,使用is,而不是==):
对于较大的程序和代码维护来说,这种形式并不像类那么好,因此,删除了它。尽管你如今不能使用字符串异常,但它们实际上提供了一种自然的工具来引入基于类的异常模式。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论