python自定义异常和主动抛出异常

python自定义异常和主动抛出异常

自定义异常主要是利用了自己定义的异常类的名字,对异常进行分门别类,再没有别的作用

import re
import os
class ExistsError(Exception):
    pass
class KeyInvalidError(Exception):
    pass
def fun(path,mnk):
    """
    去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。
        1000,成功
        1001,文件不存在
        1002,关键字为空
        1003,未知错误
        ...
    :return:
    """
    response = {'code': 1000, 'data': None}
    try:
        with  open(path,encoding="utf-8") as f1:
            line=f1.readline()
            str = re.match("mnk", line)
        if not os.path.exists(path):
            raise Exception() #抛出的是ExistsError类的一个实例
        if not str:
            raise KeyInvalidError()

    except ExistsError as e:                #下面的捕获异常是逐行往下匹配的,只要捕获到异常就不往下执行了
        response['code']=1003               #捕获异常以后可以做一些自己定义的东西
        print(response['code'])
    except Exception as e:                  #**自己定义多个异常类名的目的就是将来区分不同的错误类型,再没有别的意思
        response['code'] = 1004
        print(response['code'])
fun(r"E:\day26\s15day26\test", "p")

 

下面是对主动抛出异常的一点总结

#知识点:如何自定义类
class MyException(Exception):                   #让MyException类继承Exception
    def __init__(self,name,age):
        self.name = name
        self.age = age
try:
    #知识点:主动抛出异常,就是实例化一个异常类
    raise MyException("zhansgan",19)            #实例化一个异常,实例化的时候需要传参数
except MyException as obj:                      #这里体现一个封装,
    print(obj.age,obj.name)                     #捕获的就是MyException类携带过来的信息

except Exception as obj:                        #万能捕获,之前的可能捕获不到,这里添加Exception作为保底
    print(obj)

  

posted @ 2018-08-31 18:08  solomon123  阅读(10866)  评论(0编辑  收藏  举报