码迷,mamicode.com
首页 > 编程语言 > 详细

Python——写自己的异常(形成强大的捕捉和处理能力)

时间:2018-01-10 16:55:26      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:base   sel   username   rod   pass   intern   false   pytho   init   

""" 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", "1qaz@WSX") #如登录失败则引发异常 #     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——写自己的异常(形成强大的捕捉和处理能力)

标签:base   sel   username   rod   pass   intern   false   pytho   init   

原文地址:http://blog.51cto.com/freshair/2059465

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!