• 异常处理


    异常处理

    1.错误分类

    语法错误

    if 2 > 1
        print(222)
    
    dic = {'name'; 'alex'}
    tu = (2, 3, 4'' 6 )
    

    逻辑错误

    num = int(input('请输入数字'))
    dic = {'name': '海狗', 'age': 18}
    dic['hobby']
    

    进行一个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)
    

    2.结构1: 单分支

    try:
        num = int(input('>>>'))  # 出现ValueError错误之后,直接跳转到except语句.
        dic = {'name': '嘉欣'}
        print(dic['age'])
    
        print(111)
    except ValueError:
        print(666)
    

    3.结构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('没有此下标')
    print(666)
    

    4.结构3: 万能异常: 处理所有python识别的异常.

    try:
    
        dic = {'name': '嘉欣'}
        # print(dic['age'])
        l1 = [1, 2]
        print(l1[100])
        print(111)
        for i in 123:
            pass
    
    except Exception as e:
        print(e)
    print(666)
    
    # 什么时候用万能? 什么时候用多分支?
    # 如果你对错误信息不关心,只是想要排除错误让程序继续运行. 用万能异常.
    # 你对错误信息要进行明确的分流,让你的程序多元化开发.
    

    5.结构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('程序出现意料之外的错误....')
    

    6.结构5: try else finally

    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')
    
    # except 必须依赖于try, else必须依赖于except和try
    # finally只是依赖于try.
    
    # finally : 在异常出现之前,执行finally语句.
    try:
        dic = {'name': '嘉欣'}
        print(dic['age'])
        l1 = [1, 2]
        print(l1[100])
    # except KeyError:
    #     print('没有此键')
    # except IndexError:
    #     print('没有此下标')
    # except IndexError:
    #     pass
    # print(111)
    finally:
        print('finally 666')
    
    # finally 用在 关闭数据库连接,文件句柄关闭,数据保存等,用到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())
    
    

    7.结构6: 主动触发异常.

    raise ValueError('出现了value错误')
    

    8.结构7: 断言: 展现出一种强硬的态度.

    assert 条件
    name = 'alex'
    n1 = input('请输入:')
    assert name == n1
    print(111)
    print(222)
    
    # 自定义异常
    # 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)
    
      socket.connent .....
    
    # EOFError
    # ValueError
    
  • 相关阅读:
    精《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #4 如何使用Git
    《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #3 如何编写内核模块
    《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #2 如何编译Linux内核
    《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #1 如何获取Linux内核
    [失败]SystemTap和火焰图(Flame Graph)
    yum安装nagois
    yum安装cacti
    笔记本制作centos qcow2格式文件
    【失败】CentOS 6.5安装VNCserver 并开启远程桌面
    Linux 性能分析的前 60 秒
  • 原文地址:https://www.cnblogs.com/fengqiang626/p/11340711.html
Copyright © 2020-2023  润新知