9.2.2 自定义异常类
在很多时候需要自定义异常类。任何一个异常必须是Exception的子类。最简单的自定义异常类就是一个空的Exception类的子类。
class MyException(Exception):
pass
下面用一个科幻点的例子来演示如何自定义异常类,以及如何抛出自定义异常。
[例 9.1] 本例定义一个曲速引擎(超光速引擎)过载的异常类,当曲速达到10或以上值的时候就认为是过载,这时会抛出异常。
# 定义曲速引擎过载的异常类
class WarpdriveOverloadException(Exception):
pass
# 当前的曲速值
warpspeed = 12
# 当曲速为10或以上的值时,认为是曲速引擎过载,应该抛出异常
if warpspeed >= 10:
# 抛出自定义异常
raise WarpdriveOverloadException('曲速引擎已经过过载,请停止或弹出曲速核心,否则飞船将会爆炸')
else:
print('曲速引擎没有达到过载,可以正常使用。')
输出结果:
Traceback (most recent call last):
File "/Users/limingda/PycharmProjects/untitled6/test3.py", line 16, in <module>
raise WarpdriveOverloadException('曲速引擎已经过过载,请停止或弹出曲速核心,否则飞船将会爆炸')
__main__.WarpdriveOverloadException: 曲速引擎已经过过载,请停止或弹出曲速核心,否则飞船将会爆炸
在执行上面代码时,看到给warpspeed变量的值是12,在if判断语句中设定的是等于或大于10的会执行抛出异常,如果warpspeed变量的值小于10,那么if语句则会执行else子句的内容。
其实在自定义异常类中可以做更多的工作,如为异常类的构造方法添加更多的参数,但到目前为止,关于Python类的更高级应用还没有讲,所以本例只是实现了一个最简单的自定义异常类。关于Python类更高级的内容会在后面讲解,可以利用这些Python类的高级技术编写更复杂的异常类。