json数据,异常捕获、抛出异常

一.json文件

1.json数据:一种数据格式,满足这种格式的数据就是json数据

json文件:文件后缀名是.json,并且文件中的内容满足json格式

2.json格式

a.一个json中只有一个数据(没有数据也是错)

b.并且这个数据是json支持的数据类型

json支持的数据类型:

  数字类型 --  包含所有的数字,包括整数和小数,负数等(100, 1.2, -4等)
  字符串  --   使用双引号括起来的字符集(''1323'',''dsagg'',''$%^r''等)
  布尔   --    true 和 false
  数组  --  相当于python中的列表,使用中括号括起来,括号里面是json支持的任意类型数据
                 ([''abc'',''sd222'',333,true])
  字典  --   使用大括号括起来,括号里面 是键值对。键一般是字符串,值是json支持的任意类型数据
  特殊值 -- null(相当于None)

3.python中有一个内置的模块叫json,用来对json数据处理:json 导入json模块:import json

a.将json数据转换成python数据

loads(字符串) -- 将json格式的数据 转换成python对应的数据

注意 : 这个字符串必须是json格式数据(外层引号里面的数据是json)

        数据转换:
        json数据 :                 python数据:
        数字类型           -->       整型/浮点型
        字符串(双引号)   -->       字符串(单引号)   
        布尔(true/false) -->       布尔(True/False)
        数组               -->       列表
        字典               -->       字典
        null               -->       None

    import json
    #json.loads('''adc''')  #  去掉单引号后的数据必须是json数据
    #json.loads('100')      #  去掉单引号后的数据必须是json数据

b.将python数据转换成json数据

dumps(数据) -- 将python数据转换成符合json格式的字符串(字符串里面的内容是相应的数据类型)

注意:最终json数据结果是字符串,字符串里面的内容是json格式数据

     数据转换:
     python数据 :              json数据(字符串):
     整型/浮点型        -->       数字类型   
     字符串(单引号)    -->       字符串(双引号)   
     布尔(True/False) -->       布尔(true/false)
     列表/元祖          -->       数组
     字典               -->       字典
     None              -->       null

    
#   添加学生信息(姓名,年龄,电话),添加完成后,将数据保存到json文件中
#   并且上次添加的信息不会删除,下次在添加实在上次基础上添加
    with open('json2.json',encoding='utf-8') as f:
        xueshen=list(f.read())
    while True:
            stu = {'name:':0,'age:':0,'num:':0}
            stu['name:'] = input('请输入姓名:')
            stu['age:'] = input('请输入年龄:')
            stu['num:'] = input('请输入电话:')
            xueshen.append(stu)
            n = input('是否继续添加:')
            if n == '继续':
                continue
            else :
                break
    with open('json2.json','w',encoding='utf-8') as f:
        c = json.dumps(xueshen)
        f.write(c)

4.json文件操作相关方法

json.load(文件对象) -- 将文件对象中的数据读出来,并且转成python对应的数据

json.dump(obj,文件对象) -- 将obj数据转成json格式字符串,并且写入到文件对象中

    print('================')
    with open('test.txt', encoding='utf-8') as f:
        content = json.load(f)
        print(content, type(content), sep='\n')
    
    
    # with open('new.json', 'w', encoding='utf-8') as f:
    #     json.dump([1, 2, 3], f)
    
    
    def yt_dump(obj, file):
        with open(file, 'w', encoding='utf-8') as f:
            strstr = json.dumps(obj)
            f.write(strstr)
    
    
    yt_dump(['a', 'b', 'c'], 'new.json')

二.异常捕获

1.异常:程序运行当中出现错误,也叫出现异常

2.异常捕获:让本来会出现异常的位置不出现异常,而是自己去处理这个异常的情况

3.如何捕获异常:

a.(捕获所有异常)语法:

        try :
          代码段1
        except:
          代码段2

    执行过程:执行代码段1,如果代码段1出现异常,首先不崩溃,而是马上执行代码段2(一遇到异常代码马上执行代码段2)
               如果代码段1没有出现异常,不会执行代码段2

b.(捕获指定异常)语法:

    try :
       代码段1
    except 错误类型名 :
       代码段2

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

c. (同时捕获多个异常,对不同异常做出相同反应)语法:

    try :
      代码段1
    except (错误类型1,错误类型2,错误类型3...):
      代码段2
      
    执行过程: 执行代码段1,如果代码段1出现指定异常中的某一种,不崩溃,执行代码段2

        try:
            print([1,2,3][10])
        except :
            print('出现异常')
        print('=======')
        
        try :
            print([1,2,3][5])
            print(int('as'))
        except (ImportError,IndexError,KeyError,ValueError,LookupError):
            print('出现多种异常中的一种')

d. 同时捕获多个异常,对不同的异常做出不同的反应

    try :
      代码段1
    except 错误类型1:
       代码段2
    except 错误类型2:
       代码段3
    except 错误类型3:
       代码段4
    ...
       
    '''
    '''

4. try - except - finally

    try :
      代码段1
    except :
      代码段2
    finally :
      代码段3 (一般都是写数据保存类的代码,保存程序崩溃时的数据状态(写遗书))
      
    执行过程:代码段1和2无论会不会执行,代码段3无论如何都会执行

    try :
        print([1,2,3][11])
    except ValueError:
        print('下标越界')
    finally:
        print('finally!里面的代码段')
    print('最后。。。')

    #  输入成绩,直到输入的数据输入正确为止
    while True:
        try :
            score= float(input('请输入成绩:'))
            break
        except ValueError :
            print('输入有误!')
            #score = float(input('请输入成绩:'))
    # 封装一个函数 ,功能是获取指定文件中的内容(普通文本文件)
    def get_file(files):
           try :
             with open('files',encoding='utf-8') as f:
                 coent =f.read()
                 return coent
           except FileNotFoundError:
               print('文件路径有误!')
               return ''

三.抛出异常:主动让程序出现异常

语法:

    raise 错误类型 --  程序执行到raise的时候直接抛出异常
    注意: 错误类型必须是一个类,并且这个类是Exception的子类

你可能感兴趣的:(json数据,异常捕获、抛出异常)