python自定义异常类方式

 更新时间:2023年08月12日 08:39:58   作者:编程小段  
这篇文章主要介绍了python自定义异常类方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python自定义异常类

why?

在开发中一般是禁止写if···else···的,虽然if···else···很好理解,但那样显得代码不专业,而且有时候会有点冗余!

what?

在python中一般都有一个异常类,这里面有一些自带的异常,比如:TypeError、ValueError 等,但这些远远不能满足我们的需求,我们时常会定义自己的异常包,然后导入这个包,这样就可以愉快的开发了,下面就来展示一下如何定义自己的异常类。

how?

我们想让函数返回值不是我们想要的时候就抛出异常,我们完全可以用C语言的if···else··语句,但是为了演示我们是用python的try···except···,raise表示抛出异常,就是在返回值不等于True的时候就抛出异常

#一般都会让异常继承这个类,(或者是更高级的BaseException)
#默认大家知道__init__和__str__
class NotEqual(Exception):
    def __init__(self, msg):
        self.msg = msg
    def __str__(self):
        return self.msg
class OPT():
    def test_suit(self, a):
        if a > 10:
            return True
        else:
            return False
    def test(self):
        try:
            if ( (True != self.test_suit(5)) or
                 (True != self.test_suit(15)) ):
            #raise表示抛出异常,后面必须是定义过的异常类,
            #括号中的内容是大家想让程序打印的内容
                raise NotEqual("not equal")    
        except NotEqual as e:
            print("{}".format(e))
if __name__ == '__main__':
    option = OPT()
    option.test()
#运行结果
>>>$ python test.py
>>>  not equal

程序结尾处的print表示打印到终端(屏幕)的内容,在开发中我们还应当加上python的日志系统(self.logger.debug("……")),让输出的内容打印到日志中,方便我们定位问题。

注意:

本来True == False不是异常,只是一个非真值,但在这里我们将其处理成了异常,因为python肯定没有这样的异常,所以我们必须在开始要定义一个异常类,这样就可以用了。

python自定义异常捕获

我们在处理程序异常的时候,可能需要自己定义一些传入的message,自己定义一些error对应的error_code,在后续做异常统计的时候可以有自定义的数据,这时候其实我们可以自定义异常捕获类。

异常类一般都是继承自Exception,自定义异常类如下:

class CustomException(Exception):
    """
    Customized Exception
    Exception raised for errors in the input salary.
    Attributes:
        msg  -- error message
        code -- error attribution
    """
    msg, code = "", 0
    def __init__(self, **kwargs):
        for k, v in kwargs.items():
            setattr(self, k, v)
class UnknownException(CustomException):
    code = 100
class ItemClickFailedException(CustomException):
    """
    clickable item clicking failed
    """
    msg = "failed to click item"
    code = 1
class ItemNotFoundException(CustomException):
    """
    clickable item not found
    """
    msg = "clickable item not found"
    code = 2

定义了异常类之后,可以在程序可能出现这些异常的时候,raise这些异常

 def random_click(self, item, items) -> Info:
      if len(items) == 0:
          raise ItemClickFailedException()
      if not self.is_clickable(item):
          raise ItemClickFailedException(msg="item is not visible")
      item_attr, item_rect = self.click_item(item)
      return Info(result=True, area=item_attr, x=item_rect.center[0], y=item_rect.center[1], error=[])

并在相应的时候去进行捕获

def click(self, item, items) -> ClickInfo:
    error_list = []
    try:
        result: ClickInfo = self.random_click(item, items)
    except Exception as e:
        # 此时捕获到的是具体的异常类实例
        error_list.append(e)
    for error in error_list:
        print("msg={}, code={}".format(error.msg, error.code))

如果之前raise的异常是ItemNotFoundException,那将打印出

msg=item is not visible, code=2

如果raise的异常是ItemClickFailedException,那将打印出

msg=failed to click item, code=1

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python实用秘技之快速优化导包顺序详解

    Python实用秘技之快速优化导包顺序详解

    这篇文章主要来和大家分享一个Python中的实用秘技,那就是如何快速优化导包顺序,文中的示例代码简洁易懂,快跟随小编一起学习起来吧
    2023-06-06
  • 在Python反编译中批量pyc转 py的实现代码

    在Python反编译中批量pyc转 py的实现代码

    这篇文章主要介绍了在Python反编译中批量pyc转 py的实现代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • NumPy进行统计分析

    NumPy进行统计分析

    本文主要介绍了NumPy进行统计分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • yolov5特征图可视化的使用步骤

    yolov5特征图可视化的使用步骤

    这篇文章主要介绍了yolov5特征图可视化,本文通过实例代码给大家介绍yolov5特征图可视化使用方法,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Django零基础入门之运行Django版的hello world

    Django零基础入门之运行Django版的hello world

    这篇文章主要介绍了Django零基础入门之运行Django版的hello world,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python爬取当当、京东、亚马逊图书信息代码实例

    Python爬取当当、京东、亚马逊图书信息代码实例

    这篇文章主要介绍了Python爬取当当、京东、亚马逊图书信息代码实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • python中bytes和str类型的区别

    python中bytes和str类型的区别

    这篇文章主要介绍了python中bytes和str类型的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Python实现高分辨率图像导航的代码

    Python实现高分辨率图像导航的代码

    高分辨率图像导航是一种技术,它允许用户在大型图像中进行导航和浏览,而无需加载整个图像到内存中,在本文中,我们将使用30行Python代码实现这一功能,我们将使用Python的图像处理库和计算机视觉库来加载图像数据并生成高分辨率图像导航
    2024-03-03
  • Python数据合并的concat函数与merge函数详解

    Python数据合并的concat函数与merge函数详解

    大家都知道concat()函数可以沿着一条轴将多个对象进行堆叠,其使用方式类似数据库中的数据表合并,在使用merge()函数进行合并时,默认会使用重叠的列索引做为合并键,即取行索引重叠的部分,本文给大家介绍python 数据合并concat函数与merge函数,感兴趣的朋友一起看看吧
    2022-05-05
  • Python Fuzzywuzzy库基本函数及模糊字符串匹配应用实战

    Python Fuzzywuzzy库基本函数及模糊字符串匹配应用实战

    fuzzywuzzy 是一个用于模糊字符串匹配的 Python 库,它基于编辑距离算法,提供了多个函数来比较字符串之间的相似性,在实际开发中,字符串匹配是一项常见但具有挑战性的任务,用户可能犯拼写错误,使用缩写或者输入同义词,因此,我们需要一种方法来处理这些情况
    2023-12-12

最新评论