zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    nowcoderD Xieldy And His Password
    Codeforces681D Gifts by the List
    nowcoder80D applese的生日
    Codeforces961E Tufurama
    Codeforces957 Mahmoud and Ehab and yet another xor task
    nowcoder82E 无向图中的最短距离
    nowcoder82B 区间的连续段
    Codeforces903E Swapping Characters
    Codeforces614C Peter and Snow Blower
    Codeforces614D Skills
  • 原文地址:https://www.cnblogs.com/NiceSnake/p/11379987.html
Copyright © 2011-2022 走看看