• day27——面向对象的总结、异常处理


    day27

    面向对象的总结

    异常处理

    错误的分类
    • 语法错误
    if
    
    if 2>1
    	print(222)
        
    dic = {"name"; "alex"}
    
    • 逻辑错误
    num = int(input("请输入数字"))
    
    dic = {"name": "海狗", "age": 18}
    dic["hobby"]
    
    什么是异常?

    代码发生异常错误之后,你的程序就中断了

    异常处理?

    当代码出现异常时,我通过某种方式不让你的程序中断,合理的“跳”过去,异常处理

    为什么要有异常处理?
    • 用户体验良好
    • 使你的代码更有健壮性,容错性
    异常处理的两种方式
    • 利用if只能处理简单的异常,如果异常需要考虑的方面比较多,不适合
    • 利用try的方式进行异常处理
    try的尝试
    try:
        num = int(input("请输入序号"))  # 出现ValueError错误之后,直接跳转到except语句
        print(111)
    except ValueError:
        print(666)
        
    try:
        dic = {"name": "嘉欣"}
        print(dic["age"])
        num = int(input("请输入序号"))  # 出现ValueError错误之后,直接跳转到except语句
        print(111)
    except ValueError:
        print(666)   # 报错
    
    结构1:单分支
    try:
        num = int(input("请输入序号"))  # 出现ValueError错误之后,直接跳转到except语句
        dic = {"name": "嘉欣"}
        print(dic["age"])
        print(111)
    except ValueError:
        print(666)
    
    结构2:多分支
    try:
        num = int(input("请输入序号"))  # 出现ValueError错误之后,直接跳转到except语句
        dic = {"name": "嘉欣"}
        print(dic["age"])
        l1 = [1,2]
        print(l1[100])
        print(111)
    except ValueError:
        print("输入的有非数字元素")
    except KeyError:
        print("没有此键")
    except IndexError:
        print("没有此下表")
    
    结构3:万能异常

    万能异常:处理所有python识别的异常

    try:
        dic = {"name": "嘉欣"}
        print(dic["age"])
        l1 = [1,2]
        print(l1[100])
        print(111)
    except Exception as e:
        print(e)
    print(666)
    
    什么时候用万能异常?

    如果你对错误信息不关心,只是想要派出错误让程序继续运行,用万能异常

    什么时候用多分支?

    如果你对错误信息要进行明确的分流,让你的程序多元化开发,则使用多分支

    # 之前的写法:
    # num = input("输入序号")
    # if num.isdecimal():
    #     num = int(num)
    #     if 0 < num < 5:
    #         if num == 1:
    #             pass   # func()
    # else:
    #     print("请输入数字")
    
    def func():
        pass
    
    def func1():
        pass
    
    dic = {
        1: func,
        2: func1
    }
    try:
        num = int(input("请输入序号"))
        dic[num]()
    except ValueError:
        print("请输入数字")
    except KeyError:
        print("请输入范围内的序号")
    
    结构4:多分支+万能异常
    def func():
        pass
    
    def func1():
        pass
    
    dic = {
        1: func,
        2: func1
    }
    try:
        num = int(input("请输入序号"))
        dic[num]()
    except ValueError:
        print("请输入数字")
    except KeyError:
        print("请输入范围内的序号")
    except Exception:
        print("程序出现意料之外的错误...")
    
    结构5: try else finally

    except 必须依赖于try,else必须依赖于except和try

    finally只是依赖于try

    try:
        dic = {"name": "嘉欣"}
        print(dic["age"])
        l1 = [1,2]
        print(l1[100])
        print(111)
    except KeyError:
        print("没有此键")
    except IndexError:
        print("没有此下标")
    else:
        print("如果没有出现异常则执行这里")
    finally:
        print("finally 666")
    
    • finally:在异常出现之前,执行finally语句
    try:
        dic = {'name': '嘉欣'}
        print(dic['age'])
        l1 = [1, 2]
        print(l1[100])
    # except KeyError:
    #     print('没有此键')
    # except IndexError:
    #     print('没有此下标')
    # except IndexError:
    #     pass
    finally:
        print('finally 666')
    
    • finally用途

    用在 关闭数据库链接,文件句柄关闭,数据保存等

    # with open('test1',encoding='utf-8',mode='r+') as f1:
    #     try:
    #         for i in f1:
    #             print(i)
    #         if ....:
    #     finally:
    #
    #         f1.close()
    
    # 在return结束函数之前,执行finally代码.
    # def func():
    #     try:
    #         print(111)
    #         return 666
    #     finally:
    #         print(222)
    # print(func())
    
    结构6:主动触发异常
    raise ValueError("出现了value错误")
    
    结构7

    断言:展现出一种强硬的态度

    # assert 条件
    name = "alex"
    n1 = input("请输入:")
    assert name == n1
    print(111)
    print(222)
    
    结构8:自定义异常

    python中给你提供的错误类型很多,但不是全部的错误

    class LiYeError(BaseException):
        def __init__(self, msg):
            self.msg = msg
    
        def __str__(self):
            return self.msg
    
    try:
        # 三行
        raise LiYeError('socket.connent.....')
    except LiYeError as e: # e = LiYeError("类型错误)
        print(e)
    
  • 相关阅读:
    第一次项目总结
    8.16 CSS知识点7
    2016y9m22d 博文分享
    2016y9m8d
    2016y9m7d
    2016y9m6d
    2016y9m5d
    2016.9.2博文分享!
    2016y8m16d
    2016y8m15d
  • 原文地址:https://www.cnblogs.com/NiceSnake/p/11379987.html
Copyright © 2020-2023  润新知