美文网首页
json和异常捕获

json和异常捕获

作者: L丶Y1122 | 来源:发表于2018-11-21 09:36 被阅读0次

    1.json数据

    1.什么是json数据

    json数据就是一种数据格式,瞒住json格式的数据就是json数据。
    文件中的后缀是.json,并且文件中的内容满足json格式

    2.json格式

    一个json中只有一个数据;并且这个数据是json支持的数据类型的数据

    • json支持的数据类型:
      • 数字类型 - 包含所有的数字,包括整数和浮点数,例如:100,12.5,-20.5

      • 字符串 - 使用双引号括起来的字符集,例如:"123","abc123","%$@*"

      • 布尔 - true 和false

      • 数组 - 相当于python中的列表,使用[]括起来,括号里面是任意json支持的数据类型
        列如:["abc",true,"@@#!%%&&",100]

      • 字典 -相当于python中的字典,使用{}括起来,括号里面是键值对;
        键一般是字符串,值是json支持的任意类型的数据

      • 特殊值 - null(相当于None),表示空

    3.python有个内置的模块用来支持对json数据的处理:json
    • a.将json数据转换成python数据
    • b.将python数据转换成json数据
    • 1.将json数据转换成python数据怎么转换
      loads(字符串) - 将json格式的数据转换成python对应的数据
      字符串里面的内容必须满足json数据

    json python
    数字 -- 整型/浮点型
    字符串 -- 字符串(双引号会变成单引号)
    布尔 -- 布尔(true-->True , false-->False)
    数组 -- 列表
    字典 -- 字典
    null -- None

    import json
    #字符串
    py = json.loads('"abc"')
    print(py,type(py)) # 'abc' #<class 'str'>
    
    # 数字
    py1 = json.loads('100.12')
    print(py1,type(py1)) #100.12  #<class 'float'>
    
    # 布尔
    py2 = json.loads('false')
    print(py2) #False
    
    #数组
    py3 = json.loads('["abc",100,true]')
    print(py3) #['abc', 100, True]
    
    with open("data.json","r",encoding="utf-8")as f:
        count = f.read()
    data_dict = json.loads(count)
    # print(data_dict['data'][2]["age"])
    
    • 2.将python数据转换成json数据
      json.dumps(数据) - 将python数据转换成内容符合json格式的字符串
      注意:结果都是字符串

    python -> json
    int/flota -> 数字
    字符串-> 字符串(单引号会变成双引号)
    布尔 -> 布尔(True - true , False - false)
    列表/元组 -> 数组

    import json
    # a.数字
    js1 = json.dumps(100)
    print(js1,type(js1)) #100 <class 'str'>
    
    # b.字符串
    js2 = json.dumps("hello,world")
    print(js2,type(js2)) #"hello,world"  <class 'str'>
    
    # c.布尔
    js3 = json.dumps(True)
    print(js3,type(js3)) #true <class 'str'>
    
    # d.列表、元组
    js4 = json.dumps((10,'abc',True))
    print(js4,type(js4)) #[10, "abc", true] <class 'str'>
    js5 = json.dumps([10,'abc',True])
    print(js5,type(js5)) #[10, "abc", true] <class 'str'>
    
    # e.字典
    js6=json.dumps({"a":10,"b":20,"c":30})
    print(js6,type(js6)) #{"a": 10, "b": 20, "c": 30} <class 'str'>
    
    • 3.json文件操作相关方法
      load(文件对象) - 将文件对象的数据读出来,并且转换成python对应的数据
      (文件对象中的内容必须是json格式的数据)
      dump(数据,文件对象) - 将python数据转换成json格式的字符串,再写入文件对象中
    #练习:通过添加多个学生信息(姓名、年龄、和电话),
    # 添加完成后,最后将数据保存在josn文件中,
    # 并且上次添加的信息不回删除,下次添加的时候是在上次的基础上添加的。
    while True:
        with open("data.json","r",encoding="utf-8")as ff:
            countent =ff.read()
            list1 = json.loads(countent)
            name = input("请输入姓名:")
            age =int(input("请输入年龄:"))
            tel = int(input("请输入电话:"))
            dict1 ={"name":name,"age":age,"tel":tel}
            list1.append(dict1)
        with open("data.json","w",encoding="utf-8")as f:
            list2=json.dumps(list1)
            f.write(list2)
        num1 = input("是否继续Y/N:")
        if num1 =="Y":
            continue
        else:
            break
    

    2.异常捕获

    1.什么是异常捕获

    程序执行过程中出现错误,也叫出现异常

    2.异常捕获

    让本来会出现异常的位置,不出现异常,而是自己去处理异常出现的情况

    3.怎么捕获异常
    • 情况一:捕获所有的异常
      • 语法:
        try:
        需要捕获异常的代码段1
        except:
        代码段2

      • 执行过程:执行代码段1,如果代码段1中出现异常,不会崩溃,而是马上执行代码段2.
        如果代码段1没有异常,不会执行代码段2

    try:
        print([1,2,3][10])
    except:
        print("出现异常")
    print("========")
    
    • 情况二:捕获指定的异常
      • a.语法:
        try:
        代码段1
        except 错误类型名:
        代码段2

      • 执行过程:执行代码段1,当代码段1出现指定错误类型的时候,才执行代码段2

    try:
        print(int("abc"))
        print([1,2,3][10]) #IndexError
    except ValueError:
        print("下标越界")
    
    • 情况三:同时捕获多个异常,对不同的异常做出相同的反应
      • 语法:
        try:
        代码段1
        except (错误类型1,错误类型2):
        代码段2
      • 执行过程:执行代码段1,当代码段1中出现了指定的异常。不崩溃,然后执行代码段2
    • 情况四:同时捕获多个异常,对不同的异常做出不同的反应
      try:
      代码段1
      except 错误类型1:
      代码段2
      except 错误类型2:
      代码段3
      .
      .
      .
    4.try -except-finally
    • 语法:
      try:
      代码段1
      except:
      代码段2
      finally:
      代码段3
    • 执行过程:不管代码段1中是否出现异常,也不管异常是否捕获到,finally后面的代码都会执行(写遗书的位置)
     try:
         print([1,2,3][10])
     except KeyError:
         print("aaa")
     finally:
         print("bbbb")
    
    #统计学生的成绩,到输入的结果是"end"
    # 最后求输入的成绩的和
    
    while True:
        try:
           score = int(input("输入成绩:"))
           break
      except ValueError:
         print("输入有误!请重新输入")
    
    
    #封装一个函数,功能是获取指定文件中的内容(普通文本文件)
    # 从封装的角度:调用者做的事情,越少越好
    def huo_qu():
        while True:
            address=input("请输入文件地址:")
            try:
                with open(address,"r",encoding="utf-8") as  f:
                    countent=f.read()
                    print(countent)
                    break
            except FileNotFoundError:
                print("文件地址错误")
    huo_qu()
    

    3.抛出异常

    抛出异常:主动让程序出现异常
    • 语法:
      raise 错误类型 - 程序执行到raise类型语句的时候直接抛出异常
      注意:错误类型必须是一个类,并且这个类是exception的子类
    print([1,2,3][2])
    raise IndexError
    

    相关文章

      网友评论

          本文标题:json和异常捕获

          本文链接:https://www.haomeiwen.com/subject/sdrqqqtx.html