python学习手册(第4版) 第三十四章 异常对象

异常类与程序结构解析
本文深入探讨了程序结构,包括模块、语句块及表达式的构成,重点讲解了异常类的使用及其在异常捕获中的作用。通过具体示例,展示了如何利用超类General捕获其所有子类异常,强调了类异常的优点,如维护便利性和对未知子类的捕获能力。此外,文章还详细介绍了异常根超类BaseException与Exception的区别,以及常见数值错误超类ArithmeticError的用法。

1.再次回顾程序结构

程序由模块组成,模块包含了语句块,语句块中包含了表达式,表达式创建并处理对象。

 

2.异常类的使用

>>> class General(Exception):pass
...
>>> class Specific1(General):pass
...
>>> class Specific2(General):pass
...
>>> def raise0():
...     X = General()
...     raise X
...
>>> def raise1():
...     X = Specific1()
...     raise X
...
>>> def raise2():
...     X = Specific2()
...     raise X
...
>>> for func in (raise0,raise1,raise2):
...     try:
...         func()
...     except General:
...         import sys
...         print('caught:',sys.exc_info()[0])
...
caught: <class '__main__.General'>
caught: <class '__main__.Specific1'>
caught: <class '__main__.Specific2'>
>>>

上述例子可以说明,捕获General的处理器也会捕获其任何子类。

此处的General的使用,类似我们常用的Exception超类,所有异常类继承自Exception超类(这里的General也是如此),所以使用Exception可以捕获所有的异常。

 

3.类异常的优点

(1)使用超类,方便对其所有的子类进行捕获

(2)正因为对超类的继承,后期如果有新增的子类,不会影响对异常的捕获,维护更方便

 

4.异常根超类

BaseException  异常的顶级根类

Exception  与应用相关的异常的顶层根超类,是BaseException的一个直接子类,并且是所有其他内置异常的超类,除了系统退出事件类之外(SystemExit  KeyboardInterrupt  GeneratorExit)。同时,几乎所有用户定义的异常类都应该继承Exception,而不是BaseException,因此Exception变成了try语句的全捕获,与一个空的except相似,但它允许系统退出异常而且像平常那样通过。

ArithmethicError  所有数值错误的超类(它是Exception的一个子类)

OverflowError  识别特定的数值错误的子类

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值