Python异常信息处理——try-except-else-finally

本文介绍了Python中的异常处理机制,包括主动触发异常和自定义异常的概念。通过实例展示了如何主动抛出异常以及如何自定义如`SideParamException`和`IllegalSideException`来处理特定错误情况,如边长参数验证和三角形定理检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:《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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值