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 实现局域网远程屏幕截图案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python列表元素常见操作简单示例

    Python列表元素常见操作简单示例

    这篇文章主要介绍了Python列表元素常见操作,结合简单示例形式分析了Python针对列表元素的打印、添加、删除、修改、排序等相关操作技巧与注意事项,需要的朋友可以参考下
    2019-10-10
  • 用Python进行简单图像识别(验证码)

    用Python进行简单图像识别(验证码)

    这篇文章主要为大家详细介绍了用Python进行简单图像识别验证码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python2.7下安装Scrapy框架步骤教程

    Python2.7下安装Scrapy框架步骤教程

    本篇文章主要介绍了Python2.7下安装Scrapy框架步骤教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • python的类变量和成员变量用法实例教程

    python的类变量和成员变量用法实例教程

    这篇文章主要介绍了python的类变量和成员变量用法,是学习Python程序设计所必须牢固掌握的,需要的朋友可以参考下
    2014-08-08
  • 菜鸟使用python实现正则检测密码合法性

    菜鸟使用python实现正则检测密码合法性

    本文给大家分享了2则使用Python实现正则表达式检测密码合法性的代码,由于是新手,所以方法比较笨,不过还是分享给小伙伴,希望对大家能够有所帮助。
    2016-01-01
  • Python实现批量将MP3音频转为WAV格式详解

    Python实现批量将MP3音频转为WAV格式详解

    这篇文章主要介绍了通过Python实现将MP3音频转为WAV格式的方法,文中的示例代码讲解详细,对我们学习Python有一定帮助,感兴趣的可以了解一下
    2021-12-12
  • 十行Python3代码实现去除pdf文件水印

    十行Python3代码实现去除pdf文件水印

    pfd文档一般无法直接去除水印,需要先将pfd文档转换成图片,在逐一对图片进行水印去除操作,最后在把图片插入到pdf文档中,这样就很繁琐。本文将用十行Python3代码轻轻松松实现PDF文件水印去除,快来了解一下吧
    2022-02-02
  • Python 如何将MP4文件转为GIF图片

    Python 如何将MP4文件转为GIF图片

    这篇文章主要介绍了Python 如何将MP4文件转为GIF图片,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-05-05
  • Python填充任意颜色,不同算法时间差异分析说明

    Python填充任意颜色,不同算法时间差异分析说明

    这篇文章主要介绍了Python填充任意颜色,不同算法时间差异分析说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05

最新评论