day15 json数据、异常捕获、正则语法

1. 什么是json数据

"""
json是一种通用的数据格式,主要用于不同语言之间的数据传输。
json数据格式要求:
1)有且只有一个数据
2)唯一的数据必须是json支持的数据类型的数据
json支持的数据类型:
1)数字类型 - 包含所有的数字,表示的时候直接写(支持科学计数法),例如:11、1.1、-1.1、3e4
2)字符串 - 只能是双引号的数据,例如:“hello”、“asd\n123”
3)布尔 - 只有true和false两个值(json中是小写),表示的时候直接写,例如:true、false
4)控制 - null
5)数组 - 相当于列表,例如:[元素1,元素2,…]
6)字典 - 键只能是字符串,{键1:值1,键2:值2,…}
“”"

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

python中提供了一个系统模块:json,专门用来处理json和python之间的相互转换。

1)json转python

"""
json -> python
数字 int、float
字符串 str(双引号可能会转换成单引号)
布尔 bool,true->True、false->False
null None
数组 list
字典 dict

json.loads(json格式的字符串) - 将json格式的字符串中的内容转换成python数据。
json格式的字符串 - 指的是字符串内容是json数据的字符串(字符串去掉引号之后是一个合法的json数据)
例如:
“abc” - 不合法
‘“abc”’ - json格式的字符串
‘true’ - json格式的字符串
“”"

import json
result = json.loads('100')
print(result, type(result))  # 100 <class 'int'>
result = json.loads('"abc"')
print(result, type(result))  # abc <class 'str'>
result = json.loads('true')
print(result, type(result))  # True <class 'bool'>
#result = json.loads('{a:100, b:200, "c": True, "d": None}')
#print(result, type(result))  # JSONDecodeError
result = json.loads('{"a":100, "b":200, "c": true, "d": null}')
print(result, type(result))  # {'a': 100, 'b': 200, 'c': True, 'd': None} <class 'dict'>

2)python转json

"""
python -> json
int、float 数字
str 字符串(单引号会变成双引号)
bool 布尔:True->true、False->false
None null
list、tuple 数组
dict 字典(key会加双引号,单引号转双引号)

json.dumps(python数据) - 将python数据转换成json格式的字符串
“”"

result = json.dumps(100)
print(result, type(result))  # 100 <class 'str'>
result = json.dumps([100, 'abc', True, None])
print(result, type(result))  # [100, "abc", true, null] <class 'str'>
result = json.dumps({'a': 10, 10: 20, 30: 30})
print(result, type(result))  # {"a": 10, "10": 20, "30": 30} <class 'str'>

1.什么是异常

程序在执行过程中报错(崩溃),就叫做程序出现异常,错误就叫做异常。

当程序出现异常,程序会直接结束,不会执行异常后面的代码。

2.异常捕获

异常捕获就是让程序在出现异常的时候,程序不崩溃还可以接着往后执行

注意:不是什么时候都需要捕获异常,而是知道这个地方可能会出现异常,但是不能通过修改代码来避免异常。

(通常是因为使用者使用不当导致的异常,才需要捕获异常)

3.捕获异常

"""
方式1: - 捕获所有类型的异常
try:
代码段1(需要捕获异常的代码)
except:
代码段2(捕获异常之后执行的代码)
其他代码
执行过程:先执行代码段1,如果执行过程没有出现异常不会执行代码段2,直接执行后面的其他代码。
如果执行代码段1的之后出现异常,直接执行代码段2,执行完代码段2再执行后面的其他代码。

方式2: - 捕获指定类型的异常
try:
代码段1(需要捕获异常的代码)
except 异常类型:
代码段2(捕获异常之后执行的代码)
其他代码

方式3: - 同时捕获多种异常,统一做相同的处理
try:
代码段(需要捕获异常的代码)
except (异常类型1,异常类型2,异常类型3,…):
代码段2(捕获异常之后执行的代码)
其他代码

方式4: - 同时捕获多种异常,然后针对不同的异常做不一样的处理
try:
代码段(需要捕获异常的代码)
except 异常类型1:
代码段1(捕获异常之后执行的代码)
except 异常类型2:
代码段2

其他代码
“”"

#方式1

try:
    print('123')
    print(int('12.7'))
    print('456')
except:
    print('出现异常')
print('end')

#方式2

try:
    print([10, 20][3])
except IndexError:
    print('出现异常')
    

4.finally - 无论是否发生异常都将执行的最后的代码

"""
try:
代码段1(需要捕获异常的代码)
except:
代码段2(捕获异常之后执行的代码)
finally:
代码段
finally后面的代码段不管try后面发生了什么都会执行:
1)try后面的代码没有异常,代码段会执行。
2)try后面的代码出现异常被捕获,代码段会执行。
3)try后面的代码出现异常没有被捕获,代码段会执行。
“”"

try:
    print('abc'[3])
    print('asd')
except KeyError:
    print('捕获异常')	# 捕获异常失败,不会执行这段代码
finally:
    print('执行')    # 始终执行

5.抛出异常

主动让程序崩溃

语法: raise 异常类型

class AgeError(Exception):
    def __str__(self):
        return '年龄错误,年龄有效范围是0~200'

age = 233
if age > 200 or age < 0:
    raise AgeError

1.什么是正则表达式

正则表达式是处理字符串数据问题的工具(可以让很多复杂的字符串问题变得简单)

2.正则语法(不是python特有的,在不同的语言中使用语法大同小异)

1)普通字符 - 在正则表达式中表示符号本身的字符。
2). - 表示匹配一个任意字符
3)\d - 匹配一个任意数字
4)\D - 匹配任意一个非数字字符
5)\s - 匹配任意一个空白字符,空白字符就是能产生空白效果的字符,例如:空格、\n、\t
6)\S - 匹配任意一个非空白字符
7)[字符集] - 匹配字符集中的任意一个字符
8)[^字符集] - 匹配非字符集中的任意一个字符

from re import fullmatch	# 导入正则中的fullmatch函数

fullmatch(正则表达式,字符串) - 让正则表达式和字符串进行完全匹配,如果匹配失败返回None

正则表达式:r’正则表达式’

2)用法:r’abc.’ - 匹配一个字符串分别是a、b、c,最后一个字符是任意字符

result = fullmatch(r'abc.', 'abcs')
print(result)   # <re.Match object; span=(0, 4), match='abcs'>

2)用法:r’1…2’ - 匹配一个字符串有4个字符,第一个字符是1,最后一个字符是2,中间两个任意字符

result = fullmatch(r'1..2', '1482')
print(result)   # <re.Match object; span=(0, 4), match='1482'>

3)用法:\d - 匹配一个字符串,有4个字符,前三个字符是abc,最后一个字符是任意数字。

re_str = r'abc\d'
result = fullmatch(re_str, 'abc1')
print(result)   # <re.Match object; span=(0, 4), match='abc1'>

4)用法:\D - 匹配一个字符串,有3个字符,第一个字符是x,最后一个字符是y,中间字符是非数字的任意字符

re_str = r'x\Dy'
result = fullmatch(re_str, 'x撒y')
print(result)  # <re.Match object; span=(0, 3), match='x撒y'>

5)用法:\s

re_str = r'abc\s123'
result = fullmatch(re_str, 'abc 123')
print(result)   # <re.Match object; span=(0, 7), match='abc 123'>
result = fullmatch(re_str, 'abc\n123')
print(result)   # <re.Match object; span=(0, 7), match='abc\n123'>
result = fullmatch(re_str, 'abc\t123')
print(result)   # <re.Match object; span=(0, 7), match='abc\t123'>

6)用法:\S

re_str = r'abc\S123'
result = fullmatch(re_str, 'abc啊123')
print(result)   # <re.Match object; span=(0, 7), match='abc啊123'>

7)用法:[字符集] - 匹配字符集的任意一个字符

注意:一个[]只能匹配一个字符

匹配一个字符串有3个字符,第一个字符是x,最后一个字符是y,中间是1、m、n中的一个。

re_str = r'x[1mn]y'
print(fullmatch(re_str, 'x1y'))
print(fullmatch(re_str, 'xmy'))
print(fullmatch(re_str, 'xny'))
re_str = r'x[mn\d]y'    # 相当于:r'x[mn0123456789]y'
re_str1 = r'x[1-3]y'     # 相当于:r'x[123]y'
re_str2 = r'x[A-Z]y'     # x和y之间是任意一个大写字母
re_str3 = r'x[a-z]y'     # x和y之间是任意一个小写字母
re_str4 = r'x[\da-zA-Z]y'   # x和y之间是任意一个字母或者数字
re_str5 = r'x[,\d?a-z]y'    # x和y之间是逗号、问号、数字或者小写字母

8)用法:[^字符集] - 匹配非字符集的任意一个字符

re_str8 = r'x[^a-z]y'
print(fullmatch(re_str, 'xay'))  # None

#用正则判断手机号是否合法

import re
tel = input('请输入手机号:')
result = re.fullmatch(r'1[3-8]\d{9}', tel)
vprint(result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值