zoukankan      html  css  js  c++  java
  • 异常处理

    异常处理

    错误分类

    语法错误

    if 2 > 1
        print(222)
    # 未加冒号
    
    dic = {"name"; "alex"}
    # 字典中用冒号分隔键和值
    
    tu = (2,3,4!5)
    # 元组中用逗号相隔
    

    逻辑错误

    num = int(input("请输入数字"))
    # 输入数字以外的内容,无法整型化,报错
    
    dic = {"name": "海狗", "age": 18}
    dic["hobby"]
    # dic字典中没有["hobby"], 找不到报错
    

    try except

    try:
        num = int(input('>>>'))
        print(111)
    except ValueError:
        print(666)
    # input输入字符串类型的数字时, 输出111
    # input输入字符串类型的非数字时, 输出666
    
    try:
        dic = {'name': '嘉欣'}
        print(dic['age'])          # 出现KeyError时 直接跳转except
        num = int(input('>>>'))
        print(111)
    except KeyError:
        print(555)
    

    结构分类

    结构1 单分支

    try:
        num = int(input(">>>"))        # 出现ValueError错误时, 直接跳转except
        dic = {"name": "嘉欣"}
        print(dic["age"])
        print(111)
    except ValueError:
        print(666)
    

    结构2 多分支

    try:
        num = int(input(">>>"))
        dic = {"name": "嘉欣"}
        print(dic['age'])
        l1 = [1,2]
        print(l1[100])
        print(111)
    except ValueError:
        print("输入的有非数字元素")
    except KeyError:
        print("没有此键")
    except IndexError:
        print("没有此下标")
    print(666)
    

    结构3 万能异常处理 处理所有python可以识别的异常

    try:
        dic = {"name": "嘉欣"}
        print(dic["age"])
        l1 = [1,2]
        print(l1[100])
        print(111)
        for i in 123:
            pass
    except Exception:
        print(666)
    # 有异常直接跳转except
        
    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)
    # 捕捉异常并打印出异常原因
    

    tips

    什么时候用万能? 什么时候用多分支?

    如果你对错误信息不关心, 只是想排除信息继续让程序走下去, 用万能异常.

    你对错误信息要进行明确的分流, 让你的程序多元化开发.

    例如:
    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

    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 Exception:
        pass
    print(111)
    finally:
        print("finally 666")
    
    # finally 关闭数据库连接, 文件句柄关闭,数据保存等时,用到finally
    
    
    # 在return 结束函数之前, 执行finally代码
    def func():
        try:
            print(111)
            return 666
        finally:
            print(222)
    print(func())
    """
    111
    222
    666
    """
    

    结构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:
        print(e)
    
  • 相关阅读:
    IDEA 中 右键新建时,没有新建class的解决方案
    Git--删除远程仓库文件但不删除本地仓库资源
    Git——跟踪或取消跟踪文件
    git命令大杂烩
    判断项目中是否有slf4j的实现类
    完美解决在Servlet中出现一个输出中文乱码的问题
    mysql常用命令和语句
    设置idea快速生成doc comment
    关于pom.xml中的dependency中的顺序
    Pyqt5_QMessageBox
  • 原文地址:https://www.cnblogs.com/beichen123/p/11342254.html
Copyright © 2011-2022 走看看