python自定义捕获异常

xiaoxiao2021-02-28  53

自定义异常类

系统所提供的诸多异常类,并不足以精确地覆盖各种具体业务场景,这时我们就需要用到自定义异常;自定义的异常类,必须继承于系统的某个异常类,并在此基础上扩展;常用来作为父类的异常类有Exception和RuntimeException;一个没有继承系统异常类的普通类,是无法被抛出和处理的;在自定义的异常类中,我们可以按业务逻辑的需要,自定义许多我们自己的属性和方法,这些都有助于调用者精确地进行异常定位和处理;下面的例子定义的是一个非法三角形边长的异常,当用户输入的三个整数无法构成一个三角形进而求取三角形面积时,我们抛出一个这样的异常实例来提示调用者做好预案处理工作; # 自定义异常类:非法参数异常 class InvalidArgumentError(Exception): def __init__(self, msg): self.msg = msg def info(self): return "两边之和必须大于第三边,两边之差必须小于第三边"  

在合适的场景抛出自定义的异常

下面的函数是通过三角形边长求面积的工具函数;当输入的三条边长不合法无法构成一个三角形时,我们抛出一个上面自定义的非法边长异常实例;当调用者触发这个异常后,就知道必须对潜在的非法边长错误进行预处理了; # 工具方法:计算以a,b,c为边长的三角形的面积 def getTriangleArea(a,b,c): # 判断边长参数是否合法 if not ((a+b)>c and (b+c)>a and (a+c)>b): # 如果用户输入的参数不合法,则抛出异常和提示信息 # 创建一个InvalidArgumentError类的对象 raise InvalidArgumentError("边长参数不合法") p = (a+b+c)/2 area = math.sqrt(p*(p-a)*(p-b)*(p-c)) print(area)  

调用者捕获和处理异常

调用者使用try…except结构包裹起可能抛出非法边长异常的代码;在非法边长果然发生时,就能够调用异常实例所提供的属性和方法,来精确地提示用户错误的原因了; try: getTriangleArea(3,4,9) # 捕获和处理异常 # e是工具方法所创建和抛出的异常对象 except Exception as e: print(e.msg,e.info())  

版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/pangzhaowen/article/details/80299631

转载请注明原文地址: https://www.6miu.com/read-2621802.html

最新回复(0)