python自定义捕获异常

自定义异常类

  • 系统所提供的诸多异常类,并不足以精确地覆盖各种具体业务场景,这时我们就需要用到自定义异常;
  • 自定义的异常类,必须继承于系统的某个异常类,并在此基础上扩展;
  • 常用来作为父类的异常类有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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值