小白学习Python的第十四天之json与异常

一. json数据

1.什么是json

"""
json是一种数据格式;几乎所有的高级语言都支持这种数据格式的处理,
所以json主要用于不同语言之间的数据交流。
"""

2.json格式

"""
json格式的要求:1)一个json有且只有一个数据 
              2)唯一的这个数据必须是json支持的数据类型的数据

json支持的数据类型:
1)数字类型(Number) - 所有数字对应的类型,表示的时候直接写。例如:100, -102, 12.3, 3e3
2)字符串(String) - 用双引号引起来的字符集(只能是双引号),"abc", "abc\n123", "\ue400abc"
3)布尔(Boolean) - 只有 true 和 false 两个值
4)数组(Array) - 相当于Python的列表
5)字典(Dictionary) - 相当于Python中的字典,key只能是字符串
6)空值 - null,相当于Python的None
"""

3.json数据和python数据之间的相互转换

python中提供了一个json模块,专门用来提供处理json数据相关的函数

1)json数据转python数据

"""
json        ->          python
数字         ->          int/float
字符串       ->          字符串(可能会将双引号变成单引号)
布尔         ->          布尔(首字母变成大写字母)
数组         ->          列表(元素也会进行相应的转换)
字典         ->          字典(元素也会转换)
null        ->          None


json.loads(json格式的字符串)   -   将json格式的字符串转换成对应的python数据;
                                json格式的字符串:字符串内容满足json格式
"""
result = json.loads('"abc"')
print(result, type(result))   # abc

result = json.loads('100')
print(result, type(result))

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

result = json.loads('{"a":"b", "c": 10}')
print(result)   # {'a': 'b', 'c': 10}

# json数据
{"code":200,"msg":"success","newslist":[{"ctime":"2020-10-16 14:00","title":"2020款雷克萨斯LM300报价商务车豪华无疑,4驱动力全国上牌","description":"车讯网","picUrl":"https:\/\/img1.chexun.com\/chexunimg\/erpimg\/2020\/1016\/icon_default_211481971a1b42a684244c00a9fe5748.jpg","url":"http:\/\/www.chexun.com\/2020-10-16\/112034459.html"},{"ctime":"2020-10-16 14:00","title":"大通V90现车系列进军B型房车市场大通rv90价格特价","description":"车讯网","picUrl":"https:\/\/img1.chexun.com\/chexunimg\/erpimg\/2020\/1016\/icon_default_acffe29c8dc846c88d5e19e05b617aa0.jpg","url":"http:\/\/www.chexun.com\/2020-10-16\/112034467.html"},{"ctime":"2020-10-16 14:00","title":"2020新款亚特房车,大通V90地盘可上京牌多少钱","description":"车讯网","picUrl":"https:\/\/img1.chexun.com\/chexunimg\/erpimg\/2020\/1016\/icon_default_b1cf2be8498b42ad9d57d7f9a7f1ce42.jpg","url":"http:\/\/www.chexun.com\/2020-10-16\/112034495.html"},{"ctime":"2020-10-16 14:00","title":"拒绝定价套路,看到起亚K3才知道原来入门版本也能如此高配?","description":"车讯网","picUrl":"https:\/\/img1.chexun.com\/chexunimg\/erpimg\/2020\/1016\/icon_default_a0f1c4af868047978d607f5f9468f52d.jpg","url":"http:\/\/www.chexun.com\/2020-10-16\/112034521.html"},{"ctime":"2020-10-16 14:00","title":"华云途骏房车发布了一款全新升级改款的依维柯房车","description":"车讯网","picUrl":"https:\/\/img1.chexun.com\/chexunimg\/erpimg\/2020\/1016\/icon_default_fe94c5198ae64dec8308abe64eed7810.jpg","url":"http:\/\/www.chexun.com\/2020-10-16\/112034533.html"},{"ctime":"2020-10-16 14:00","title":"新款雷克萨斯LM300商务车四座\/七座报价","description":"车讯网","picUrl":"https:\/\/img1.chexun.com\/chexunimg\/erpimg\/2020\/1016\/icon_default_01c9a2839fde406595b7f25226359bac.jpg","url":"http:\/\/www.chexun.com\/2020-10-16\/112034545.html"},{"ctime":"2020-10-16 14:00","title":"本田冠道报价多少钱 最新优惠价格 现车最低价格 降价促销中","description":"车讯网","picUrl":"https:\/\/img1.chexun.com\/chexunimg\/erpimg\/2020\/1016\/icon_default_d394431c02144107b53b2461e4a64bef.jpg","url":"http:\/\/www.chexun.com\/2020-10-16\/112034565.html"},{"ctime":"2020-10-16 14:00","title":"依维柯大额头C型房车依维柯金冠单拓展房车特价","description":"车讯网","picUrl":"https:\/\/img1.chexun.com\/chexunimg\/erpimg\/2020\/1016\/icon_default_e26e5429ff014ec79b2891a951342a70.jpg","url":"http:\/\/www.chexun.com\/2020-10-16\/112034579.html"},{"ctime":"2020-10-16 14:00","title":"12.49万起售搭两种动力!奇瑞瑞虎8 PLUS值不值","description":"车讯网","picUrl":"https:\/\/img1.chexun.com\/chexunimg\/erpimg\/2020\/1016\/icon_default_43149639427b400c80d3942ab93da98f.jpg","url":"http:\/\/www.chexun.com\/2020-10-16\/112034605.html"},{"ctime":"2020-10-16 14:00","title":"本田CRV价格优惠 北京现车降价升级可分期","description":"车讯网","picUrl":"https:\/\/img1.chexun.com\/chexunimg\/erpimg\/2020\/1016\/icon_default_118655c1c37d44a2a0a55e2130651fc6.jpg","url":"http:\/\/www.chexun.com\/2020-10-16\/112034701.html"}]}
# 实例1:json文件数据解析,取出title中的内容
with open('data.json', encoding='utf-8') as f:
    result = f.read()
re = json.loads(result)
for i in re['newslist']:
    print(i['title'])

2)python数据转json数据

"""
python          ->          json
int                         数字 
float                       数字
字符串                       字符串(引号会变成双引号)
布尔                         布尔(True -> true;False -> false)
列表、元组                    数组(元素也会自动转换)
字典                         字典(key全部自动变成字符串)
None                        null

json.dumps(python数据)   -   将指定的python数据转换成json格式的字符串
"""
result = json.dumps(10)
print(type(result), 10)   # <class 'str'> 10

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

result = json.dumps({'a': 10, 10: 100})
print(result)   # {"a": 10, "10": 100}

二. 异常捕获

1.什么是异常
异常就是错误(程序报错就是程序出现异常)

执行程序的过程中如果出现异常,程序会直接结束(实际上是线程结束)

2.什么是异常捕获

"""
1)
异常捕获就是让程序在出现异常的时候,不崩溃继续执行。

2)
不是任何异常都可以捕获的,只有在明知道某段代码会出现异常但是又不能或者不方便通过修改代码来避免这个异常,
这个时候就可以对异常捕获。
"""

3.怎么捕获异常

"""
方法一:捕获代码段1中所有异常
try:
    需要捕获异常的代码段-代码段1
except:
    捕获到异常后会执行的代码段
finally:
    代码块
其他代码


执行过程:先执行try里面的代码段,执行过程中如果出现异常,程序不崩溃,马山执行except后面的代码段,执行完后执行其他代码;

如果执行try里面的代码段没有出现异常,except后面的代码不会执行,直接执行其他代码


# 方法二:捕获指定异常
try:
    需要捕获异常的代码段
except 异常类型:
    捕获到指定异常后会执行的代码段
finally:
    代码块
    
# 方法三:同时捕获多种异常,针对不同的异常做相同的处理
try:
    需要捕获异常的代码段
except (异常类型1, 异常类型2, ...):
    捕获到指定异常后会执行的代码段
finally:
    代码块

# 方法四:同时捕获多种异常,针对不同的异常做不同的处理
try:
    需要捕获异常的代码段
except 异常类型1:
    捕获到指定异常后会执行的代码段
except 异常类型2:
    捕获到指定异常后会执行的代码段
...
finally:
    代码块
"""
# 方法一
try:
    age = int(input('请输入年龄:'))
except:
    print('输入年龄的格式不正确!')
# 方法二
try:
    list1 = [10, 20]
    print(list1[10])
except IndexError:
    print('出现异常')
# 4.finally   -   写遗书,程序崩溃前的最后一次挣扎
try:
    list1 = [10, 20]
    print(list1[10])
except KeyError:
    print('出现异常')
finally:
    print('我还要挣扎一下')

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

raise异常类型

异常类型可以是系统异常类型也可以是自定义的异常类型

def func1(age: int):
    if age < 0 or age > 150:
        raise ValueError
    if age >= 18:
        print('成年人')
    else:
        print('未成年')


func1(-1534)   # ValueError
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值