美文网首页
json、异常捕获

json、异常捕获

作者: 有趣的恶魔QAQ | 来源:发表于2019-01-09 20:02 被阅读0次

一、json

1.什么是json数据

json是一种具有特定语法的数据格式

2.json数据的语法

一个json数据有且只有一个数据, 这个数据的数据类型必须是json支持的数据类型

3.json支持的数据类型
  • a.数字类型: 包含所有的数字,包括整数、小数;例如: 100, 12.5, -3.14
  • 注意:1)整数前面不能加'+'
    2)支持科学计数法: 3e2
  • b.字符串: 使用双引号括起来的数据; 例如:"abc", "abc123,!"
  • c.布尔: 只有true和false两个值
  • d.数组: 相当于python的列表,用[]括起来,多个元素用逗号隔开;例如: [100, "abc", [1, 2]]
  • e.字典: 相当于python的字典, 用{}括起来,多个键值对用逗号隔开, 例如:{"a": 10, "b": 20, "c": [1, 3]}
  • f.空值: null,相当于python中的None
4.python处理json数据

python中提供了json模块,专门用来处理json数据

1) 将json数据转换成python数据(通过爬虫获取到别人提供的json数据,在python中处理)
a.转换方式

json --> python

  • 数字 int/float
  • 字符串 str, 可能双引号会变成单引号
  • 布尔 bool, 会将json中的true/false转换成- True/False
  • 数组 list
  • 字典 dict
  • 空值(null) None
b.loads方法

loads(字符串, encoding='utf-8') - 将字符串中的json数据转换成对应的python数据
!!!!!!!!注意: 这儿的字符串中!!!内容!!!!必须json数据

2.将python数据转换成json数据(python写后台接口将数据提供给客户端)
a.转换方式
  • python ---> json
  • int/float 数字
  • str 字符串, 单引号会变成双引号
  • bool True->true; False->false
  • list/tuple 数组
  • dict 字典
  • None null
b.dumps(对象) - 将指定的对象转换成json数据, 以字符串的形式返回这儿的对象指的就是python数据

注意: 返回值是字符串,并且字符串的!!!!内容!!!!是json数据

5.json文件处理

严格来说,json文件是文件内容是json数据的文件

load(文件对象) - 将指定文件中的内容读出来,并且转换成python对应的数据。
注意:这儿的文件对象对应的文件必须是json文件

dump(对象, 文件对象) - 将指定对象转换成内容是json格式的字符串,然后写入指定的文件中
注意:这儿的对象对应的类型必须是能够转换成json的数据类型

import json


def main():
    print('================3.读json文件=================')

    with open('data.json', encoding='utf-8') as f:
        result = json.load(f)   # 相当于 result = json.loads(f.read())
        print(type(result), result['msg'])

    all_student = [
        {'name': '小明', 'age': 12, 'tel': '1237736'},
        {'name': 'yuting', 'age': 18, 'tel': '23333'},
        {'name': 'Luffy', 'age': 20, 'tel': None},
        {'name': 'zuoLuo', 'age': 30, 'tel': '923736'},
    ]
    with open('student.json', 'w', encoding='utf-8') as f:
        json.dump(all_student, f)  # 相当于 f.write(json.dumps(all_student))

    print(' ===============2.python转json===============')
    result = json.dumps(100.23)
    print(type(result), result)    # '100.23'

    result = json.dumps('abc')
    print(type(result), result)  # '"abc"'

    result = json.dumps(True)
    print(type(result), result)  # 'true'

    result = json.dumps([10, 'abc', True, None])
    print(type(result), result)  # '[10, "abc", true, null]'

    result = json.dumps((10, 'abc', True, None))
    print(type(result), result)  # '[10, "abc", true, null]'

    result = json.dumps({'a': 10, 'b': 'abc', 'c': True, 'd': None})
    print(type(result), result)  # '{"a": 10, "b": "abc", "c": true, "d": null}'
##### 集合不能转换成json数据

# result = json.dumps({10, 'abc', True, None})
# print(type(result), result)  # '[10, "abc", true, null]'
    # ===============1.json转python===============
    print('===========================')
    # 将json中的字符串转换成python数据
    content = json.loads('"abc"', encoding='utf-8')
    print(content, type(content))   # abc <class 'str'>

   ##### 将json中的数字转换成python数据
    content = json.loads('100', encoding='utf-8')
    print(content, type(content))

    # 将json中的字典转换成python数据
    message = '{"name": "张三", "age": 18, "sex": null, "marry": true}'
    content = json.loads(message, encoding='utf-8')
    print(content, type(content))
    print(content['name'])

    # 练习1
    with open('data.json', encoding='utf-8') as f:
        info = f.read()
        # print(type(info), info)
        dict1 = json.loads(info, encoding='utf-8')
        for item in dict1['data']:
            print(item['url'])

if __name__ == '__main__':
    main()

二、异常捕获

1.异常捕获 - 让本该崩溃的代码不报错

应用于当知道某段代码会出现异常,而且但是又没办法避免,同时又不希望出现异常导致程序崩溃这个时候就可以通过异常捕获,来让程序不崩溃并且自行处理异常

2.异常捕获语法
  • a.try - except -- (可以捕获所有类型的异常 - 只要代码段1中出现了异常就捕获)

try:
代码段1(可能会出现异常的代码段)
except:
代码段2(处理异常的代码段)
其他语句

执行过程:

①执行代码段1,如果代码段1出现异常,程序不崩溃,直接执行代码段2
②如果代码段1中没有出现异常,就不执行代码段2而是直接执行后面的其他语句

  • b.try - except 错误类型 -- (捕获指定类型的异常,只有代码段1中出现了指定类型的异常才捕获)

try:
代码段1(可能会出现异常的代码段)
except 错误类型:
代码段2(处理异常的代码段)
其他语句

  • c.try - except (错误类型1,错误类型2) -- (同时捕获多种指定类型的异常,可以是一种或者多种)

try:
代码段1(可能会出现异常的代码段)
except (错误类型1,错误类型2):
代码段2(处理异常的代码段)
其他语句

  • d.try - except 错误类型1 - except 错误类型2...(同时捕获多种异常,可以对不同的异常做不同的处理)

try:
代码段1(可能会出现异常的代码段)
except 错误类型1:
代码段2(处理异常的代码段)
except 错误类型2:
代码段3(处理异常的代码段)
其他语句

def main():
    print('===============1.try-except=================')
    try:
        print('cc520'[6])
        number = int(input('请输入一个数字:'))  # 若用户在此处无意间输入32f,则会导致程序崩溃影响用户体验,则可以用异常捕获
        print(number)
    except(IndexError, ValueError):
        print('出现异常!')
练习:输入数字,如果输入有误就继续输入,直到输入正确为止
    while True:
        try:
            num1 = int(input('请输入一个数字:'))
            print('输入正确!')
            break
        except:
            print('输入有误,请继续输入!')


if __name__ == '__main__':
    main()

3.抛出异常 - 主动让程序崩溃

raise 错误类型

说明:错误类型 - 可以是系统提供的错误类型,也可以是自定义错误类型(要求这个值必须是一个类,而且是Excption的子类)

def cc_age(age: int):
    """
    age 必须等于18
    :param age:
    :return:
    """
    if age != 18:  # 如果不按照要求年龄等于18就报错
        raise ValueError  # 直接抛出错误
    print(age)
cc_age(19)

相关文章

网友评论

      本文标题:json、异常捕获

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