Python——写自己的异常(形成强大的捕捉和处理能力)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python——写自己的异常(形成强大的捕捉和处理能力)相关的知识,希望对你有一定的参考价值。
""" 1、编写自己的异常时,通常是继承Exception 2、如果继承的是BaseException,那么就不会被通用的except Exception捕捉到 3、自己定义的异常Python不会自动触发,需要自己触发,用raise进行触发 4、python只会自动触发它自己本身内置的异常,如IndexEerror,NameError,IOError等,只要是Error结尾通常都是内置异常 """ class MyException(Exception): def __init__(self, msg): #msg参数用于接收自己触发异常时传进来的错误描述信息 self.msg = msg def __str__(self): #格式化输出 return "[Internal Logic Error:] %s" % (self.msg) #例子1: # if __name__ == '__main__': # flag = False # try: # if flag: # print("Initialization data") # print("done...") # else: # raise MyException("no data") #触发自己的异常 # except MyException as err: #捕捉被触发的自定义异常 # print(err) #打印异常信息,如果有参数,那么可通过err.args打印参数 #例子2:在自定义的异常中能否捕捉内置异常呢? # if __name__ == '__main__': # a = [1,2,3,4] # # print(a[10]) # 将这一句放在这里,则抛出IndexError: list index out of range,且程序停止运行 # flag = False # try: # if flag: # print("Initialization data") # print("done...") # print(a[10]) #这里访问一个不正确的索引,似乎捕捉不到 # else: # raise MyException("no data") #触发自己的异常 # except MyException as err: #捕捉被触发的自定义异常 # print(err) #打印异常信息,如果有参数,那么可通过err.args打印参数 #******************编写一个需要给定初始值的自定义异常类**************** class LoginExce(Exception): def __init__(self, username, password): super().__init__("your username:{name} and passwd:{pwd} is error".format(name=username, pwd=password)) self.user = username self.pwd = password def log(self): print("登录异常记录到日志...") log_err_info = ("u:%s p:%s login failed" % (self.user, self.pwd)) # if __name__ == '__main__': # auth = False #这标志位用于模拟登录的状态 # try: # if auth: # print("登录成功...") # else: # raise LoginExce("toby", "[email protected]") #如登录失败则引发异常 # except LoginExce as err: #捕捉这个异常 # err.log() #调用异常类的日志记录的方法 # print(err) #打印异常信息 # # 根据上面的测试得知,只有在引发了自定义的异常后,才能访问到异常的实例,名字叫err #看下面两个函数,一个是用if,还有一个是通过捕捉异常 def func_a(num): try: print(100 / num) except (ZeroDivisionError, TypeError): print("value Value can not be illegal") def func_b(num): if num == 0: print("value Value can not be 0") return if isinstance(num, str): print("value Value can not be str") return else: print(100 / num) func_a(0) func_b(0) func_a("abc") #传入字符串 func_b("abc") #传入字符串 #那么,其实这两种方式可以结合使用,形成强大的捕捉和处理能力
以上是关于Python——写自己的异常(形成强大的捕捉和处理能力)的主要内容,如果未能解决你的问题,请参考以下文章