纯属个人见解,内容并不是完全靠谱,仅供参考
自定义异常类以及异常链
自定义异常类的作用就是覆盖Exception范围未涵盖的错误异常。这类错误异常可以通过自定义异常去捕捉以及处理。
所以对于可以被Exception所捕捉到的普遍异常,是没有必要自定义的,如果去自定义也需要很深厚的编程功力,目前没有能力拓展。
以下是一个简单的异常算法,在该算法中包含了自定义异常类,以及异常链的相关知识。
异常链是什么呢?
就是当你处理一个异常会产生第二个异常比如:
except SelfError ase:
raise Exception
像这样就会产生两个异常,下面的异常是由上面的异常直接造成的。在终端上就会输出两个错误异常。那么如果只希望终端上面就报下面这个异常,而不报SelfError这个异常怎么办呢?
就要使用raise Exception(这里是Exception)from None
这时终端出现一个异常
如果使用raise Exception (这里是Exception)from OhterException(SelfError)
就会出现两个异常。在这里这句话等同于
except SelfError ase:
raise Exception
作用:用来多加一行代码
实战算法如下:
1.class SelfError(Exception):
2. """自定义异常类"""
3. def __init__(self,sex,toy:'Vagina'='Vibe'):
4. Exception.__init__(self)
5. self.sex=sex
6. self.toy=toy
7.
8.newhalf={'didi':'ai''ai'}
9.newhalf.update(dict.fromkeys(['jiji','mimi'],'aiai'))
10.try:
11. a,*b=newhalf
12. if len(b)<3:
13. raise SelfError(None)
14.except SelfError ase:
15. raise Exception('{}长的难看的再折腾也是废物,/'
'长的好看再瞎折腾也不会差'.format(e.toy))from e.__cause__(e.__cause__就是None)
res-------------------------------------
Traceback (most recent call last):
File "E:/代码三/hello.py", line 17, in <module>
'长的好看再瞎折腾也不会差'.format(e.toy)) from e.__cause__
Exception: Vibe长的难看的再折腾也是废物,长的好看再瞎折腾也不会差