json和异常捕获笔记
-
json数据
-
什么是json
json是一种通用的数据格式,只要用于不同的语言之间的数据传输
json数据格式要求:1)一个json有且只有一个数据
2)唯一的数据必须是json支持的数据类型数据(数字、字符串、布 尔、空值、数组、字典)
json支持的数据类型:
数字——包含所有数字,直接写,例如:1, 2, 3
字符串——使用双引号引起来,例如:“你好”
布尔——true和false
空值——null
数组——相当于python中的字典,例如:[元素1, 元素2, …]
字典——同python中的字典,{键1: 值1 , 键2: 值2, …
-
python与json之间转换
python中提供了一个系统模块:json,专门用来处理json与python之间的转换
-
json转python
json ——> python
数字 ——> int、float
字符串 ——> str(可能会将双引号变成单引号)
布尔 ——> True、False
null ——> None
数组 ——> 列表
字典 ——> 字典json.loads(json格式的字符串)——将json格式的字符串中的内容转换成python数据
json格式的字符串——字符串的内容是json数据字符串。(字符串去掉引号后本身就是一个标准的json数据字符串)
例如:’“abc”’、‘true’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('{"a": 100, "b": 200, "c": true, "d": null}') print(result) # {'a': 100, 'b': 200, 'c': True, 'd': None}
-
python转json
python ——> json
int、float ——> 数字
str ——> 字符串(可能会将单引号变成双引号)
bool ——> true、false
None ——> null
列表、元组 ——> 数组
字典 ——> 字典(key会自动加双引号)json.dumps(python数据)——将python数据转化为json数据类型的字符串
result = json.dumps([100, 'abc', True, None]) print(result) # [100, "abc", true, null] result = json.dumps({'a': 10, 'b': 50, 10: 20}) print(result) # {"a": 10, "b": 50, "10": 20}
-
-
-
异常捕获
-
什么是异常捕获
程序在执行过程中报错(崩溃),就叫程序出现异常,错误就是异常
当程序出现异常,程序会直接结束,不会执行异常后面的代码。 -
异常捕获
异常捕获就是让程序在出现异常的时候,程序不崩溃还可以直接往后执行。
注意:不是什么时候都要捕获异常的,而是程序知道这个地方可能出现异常,但是又没有办法通过修改自己的代码来避免异常(因为使用者操作不当导致的异常),这个时候才需要对异常进行捕获。
age = int(input('请输入年龄:')) print(age) try: age = int(input('请输入年龄:')) print(age) except: print('格式不对') print('end')
-
异常捕获方式
-
方式1:捕获所有类型的异常
try:
代码段1
except:
代码段2代码段1——>需要捕获异常的代码
代码段2——>捕获到异常后会执行的代码执行过程:先执行代码段1,如果执行过程没有出现异常不会执行代码段2,直接执 行后面其他语句;
如果执行代码段1出现异常,则直接执行代码段2,然后再执行其他语句 -
方法2:捕获指定类型异常
try:
代码段1
except 异常类型:
代码段2 -
方式3:同时捕获多种异常,针对不同的异常做相同的处理
try:
代码段1
except(异常类型1, 异常类型2, …):
代码段2 -
方式4:同时捕获多种异常,然后根据不同的异常做不同的处理
try:
代码段1
except 异常类型1:
代码段21
except 异常类型2:
代码段22
except 异常类型3:
代码段3
…不管finally前边的代码执行如何,最终都会执行finally里边的代码段
try: print('abc'[3]) except KeyError: print('捕获到异常') finally: print('协议书') # 程序报错,但会执行finally里边的代码 try: print('abc'[3]) except IndexError: print('捕获到异常') finally: print('协议书') # 捕获到异常,最后执行finally中的代码
-
抛出异常——主动让程序崩溃
-
语法:raise 异常类型
-
使用自定义异常
class AgeError(Exception): def __str__(self): return 'Age out of effiction range!' # 抛出异常 age = 800 if age > 200 or age < 0: raise AgeError
-
-
-
-
正则表达式
-
什么是正则表达式
- 正则表达式是处理字符串数据问题的工具(可以让很多复杂的字符串问题变得更加简单)
-
正则语法(在不同语言中语法大同小异)
-
普通字符——在表达式中表示符号本身的字符,无特殊意义
-
. —— 表示匹配一个任意字符(多少个点就需要匹配多少个字符)
-
fullmatch(正则表达式, 字符串)——让正则表达式和字符串进行完全匹配。如果匹配失败返回None
正则表达式:格式: ‘正则表达式’
# r'abc'. —— 匹配一个字符串前三个字符分别是a,b和c,最后一个是任意字符 result = fullmatch(r'abc.', 'abc=') print(result)
# r'1..2' —— 匹配一个字符串有4个字符,第一个字符是1, 最后一个字符是2, 中间两个任意字符 result = fullmatch(r'1..2', '1kj2') print(result)
-
-
\d——匹配一个任意数字
# 匹配一个字符串,有四个字符,前三个字符是abc,最后一个字符是任意数字 re_str = r'abc\d' result = fullmatch(re_str, 'abc3') print(result)
-
\D——匹配一个任意非数字字符
re_str = r'abc\Ds' result = fullmatch(re_str, 'abcms') print(result)
-
\s——匹配一个任意空白字符
# 空白字符:凡是能产生空白效果的字符,例如:空格、\n、\t re_str = r'abc\s123' result = fullmatch(re_str, 'abc 123') print(result)
-
\S——匹配一个任意非空白字符
re_str = r'abc\S123' result = fullmatch(re_str, r'abc\123') print(result)
-
[字符集]——匹配任意一个字符
from re import fullmatch # 匹配一个字符串有三个字符,第一个是x,最后一个是y,中间是1或者m或者n re_str = r'x[1mn]y' result1 = fullmatch(re_str, 'x1y') print(result1) re_str = r'x[mn\d]y' # 相当于:r'x[mn0123456789]y' # result = fullmatch(re_str, r'x2y') print(fullmatch(re_str, r'x2y')) print(fullmatch(re_str, r'xmy')) print(fullmatch(re_str, r'xmy')) re_str = r'x[2-4]y' # 相当于: r'x[234]y' print(fullmatch(re_str, 'x2y')) print(fullmatch(re_str, 'x3y')) print(fullmatch(re_str, 'x4y')) re_str1 = r'x[A-Z]y' # 相当于x和y之间是任意一个大写字母 print(fullmatch(re_str1, 'xAy')) print(fullmatch(re_str1, 'xBy')) print(fullmatch(re_str1, 'xZy')) re_str = r'x[\da-zA-Z]y' # x和y之间是一个数字或者字母 print(fullmatch(re_str, 'xAy')) print(fullmatch(re_str, 'x1y')) print(fullmatch(re_str, 'xay')) re_str = r'x[,?\da-z]y' # # x和y之间是一个,或者?或者数字或者小写字母
-
[^字符集]——匹配不在字符集里边的任意一个字符
re_str2 = r'x[^a-z]y' # 匹配不在小写字母集里边的字符 print(fullmatch(re_str2, 'x1y')) print(fullmatch(re_str2, 'xBy'))
其他练习:
import re tel = input('请输入手机号:') result = re.fullmatch(r'1[3-8]\d{9}', tel) print(result) message = 'msh12阿时候回国340分开收电费7阿迪锅' result = re.sub(f'\d+', '+', message) print(result)
-
-