参考:《Python+Excel办公自动化一本通》
基础知识就不讲了,其异常处理机制的语法结构总体上来说就是下面这样:
这里主要是想记录一下主动触发异常和自定义异常
- 主动触发异常
在一些开发中,有时候需要主动触发异常,这样就能够根据调用者提供的异常信息进行调整,如下所示:
以下是运行结果
主动捕捉异常和主动抛出异常的区别
主动捕捉异常是开发者需要自己主动处理和捕捉那些可能会触发异常的代码,从而使程序更加健壮。而主动抛出异常是一种自己不处理当前可能会出现的异常,而将处理权丢给程序的调用者,最终由程序的调用者处理这些异常。
- 自定义异常
在Python中,所有的异常都继承一个基类——BaseException,也就是说,它就是最基本的异常类,不过一般不会用到BaseException类,而是使用它的子类Exception,BaseException是所有的异常类的基类,而Exception是非系统异常退出的类,一般来说,开发者在自定义异常时建议使用Exception类。
自定义异常类可以更精确地定位问题所在,下面以三角形定理两边之和大于第三边为例,来讲述如何使用自定义异常类。
class SideParamException(Exception):
"""定义边长参数异常,检查数值小于或等于0的边长错误"""
__info = "三角形任意一条边的边长都不得小于或等于0"
# 构造方法
def __init__(self, info=None):
if info is not None:
self.__info = info
# 变为字符串的方法
def __str__(self):
return self.__info
class IllegalSideException(Exception):
"""按三角形定理检查,两边之和大于第三边"""
__info = "三角形两边之和必须大于第三边"
def __init__(self, info=None):
if info is not None:
self.__info = info
def __str__(self):
return self.__info
class Triangle:
def __init__(self, a, b, c):
"""
三角形
:param a: 三角形 a 边
:param b: 三角形 b 边
:param c: 三角形 c 边
"""
self.__check(a, b, c) # 确定三条边是否都满足三角形定理
self.__a = a
self.__b = b
self.__c = c
# 检查错误,如果存在错误则抛出异常
def __check(self, a, b, c):
# 三角形边长参数错误
if a <= 0 or b <= 0 or c <= 0:
raise SideParamException("三角形任意一条边的边长都不得小于或等于0!")
# 检查两边之和是否大于第三边
if a+b <= c or a+c <= b or b+c <= a:
raise IllegalSideException()
if __name__ == "__main__":
triangle = Triangle(1, 2, 3)