Day15 JSON、异常以及正则表达式
-
JSON
-
什么是json数据
- json是一种通用的数据格式, 主要用于不同语言之间的数据传输.
- json数据格式要求
- 有且只有一个数据
- 这个唯一的数据必须是json支持的数据类型
- json支持的数据类型
- 数字类型 - 包含所有的数字, 表示的时候直接写, 例如: 30, 12.6, -12, 3e4
- 字符串 - 用双引号引起来的数据(只能是双引号), 例如: “你好”, “hello!”, “abc\n123”
- 布尔 - 只有true和false两个值, 表示的时候直接写, 例如: true、false
- 空值 - null
- 数组 - 相当于列表, 例如: [元素1, 元素2, …]
- 字典 - {键1: 值1, 键2: 值2,…}, 键只能是字符串
-
python数据和json之间的相互转换
-
python中提供了一个系统模块: json, 用来处理json和python之间的相互转换
-
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” -> 不是
‘“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, type(result)) #{'a': 100, 'b': 200, 'c': True, 'd': None} <class 'dict'>
-
-
python转json
-
python -> json
int、folat 数字
str 字符串(引号会变双引号)
bool 布尔: True -> true、False -> fale
None null
list、tuple 数组
dict 字典(key会加双引号) -
json.dumps(python数据) - 将python数据转换成json格式的字符串
-
result = json.dumps(100) #100 <class 'str'> print(result, type(result)) result = json.dumps([100, 'asd', True, None]) print(result, type(result)) #[100, "asd", true, null] <class 'str'> result = json.dumps('asdc') print(result, type(result)) #"asdc" <class 'str'>
-
-
-
-
异常捕获
-
什么是异常
- 程序在执行过程中报错, 就叫程序出现异常. 错误就是异常.
- 程序出现异常后会直接结束, 不再执行异常后的代码
-
异常捕获
- 异常捕获就是让程序在出现异常后不崩溃, 还能接着往后执行
- 注意: 不是任意时候都需要捕获异常的, 而是程序员知道这个地方可能会出现异常, 但是有没有办法通过修改自己的代码来避免这个异常(应为使用者使用不当导致的异常),此时才需要对异常进行捕获
-
捕获异常
-
方法一: 捕获所有类型异常
-
try: 代码段1(需要捕获异常的代码) except: 代码段2(捕获异常后会执行的代码) 其他代码
-
执行过程: 出现异常:代码段1 -> 代码段2 -> 其他代码
没有异常:代码段1 -> 其他代码
-
-
方法二: 捕获指定类型异常
-
try: 代码段1(需要捕获异常的代码) except 异常类型: 代码段2(捕获异常后会执行的代码) 其他代码
-
-
方法三: 同时捕获多种异常, 针对不同异常做相同的处理
-
try: 代码段1 except(异常类型1, 异常类型2, 异常类型3,...) 代码段2
-
-
方法四: 同事捕获多种异常, 针对不同异常做不一样的处理
-
try: 代码段1 except 异常类型1: 代码段11 except 异常类型2: 代码段22 except 异常类型3: 代码段33
-
try: print('123') print('abc'[8]) print(456) except: print('出现异常') print('end') try: age = int(input('请输入一个年龄(整数):')) if age > 18: print('成年') else: print('未成年') except: print('年龄输入有误') try: print([10, 20][3]) print({'abc':10}['a']) except IndexError: print('出现异常')
-
-
finally - 写遗书
-
try: 需要捕获异常的代码段 except: 捕获到异常后需要执行的代码段 finally: 代码段
-
finally后面的代码无论try后发生了什么情况都会执行
- try后代码没有异常
- try后代码出现异常并被捕获
- try后代码出现异常没有被捕获
-
try: # print('abc') print('abc'[3]) except IndexError: print('捕获到异常') finally: print('写遗书')
-
-
抛出异常
- 主动让程序崩溃
- 语法: raise 异常类型
class AgeError(Exception): def __str__(self): return 'Η τιμή της ηλικίας είναι λανθασμένη, το έγκυρο εύρος της ηλικίας είναι 0~200! ' age = 23 if age > 200 or age < 0: raise AgeError
-
-
正则表达式
-
什么是正则表达式
- 正则表达式是处理字符串数据问题的工具(可以让很多复杂的字符串问题变得简单)
- fullmatch(正则表达式, 字符串) - 让正则表达式和字符串进行完全匹配. 匹配失败返回None
- 正则表达式
- r’正则表达式’ - python中的正则表达式
- /正则表达式/ - js中的正则表达式
-
正则语法
-
普通字符 - 在正则表达式中表示符号本身的字符.
-
. - 匹配一个任意字符
-
# r'abc.' - 匹配一个字符串前三个字符分别是a b c, 最后一个字符是任意字符. result = fullmatch(r'abc.', 'abc[') print(result) # r'1..2' - 匹配一个字符串有四个字符, 1开头 2结尾,中间两个任意字符 result = fullmatch(r'1..2', '1sa2') print(result)
-
-
\d - 匹配一个任意数字
-
# 匹配一个字符串, 四个字符, abc开头 任意数字结尾 re_str = r'abc\d' result = fullmatch(re_str, 'abc10') print(result)
-
-
\D - 匹配任意一个非数字字符
-
re_str = r'x\Dy' print(fullmatch(re_str,'xpy'))
-
-
\s - 匹配任意一个空白字符
-
# 空白字符 - 凡是能产生空白效果的字符, 例如: 空格、\n、\t re_str = r'abc\s123' result = fullmatch(re_str, 'abc\t123') print(result)
-
-
\S - 匹配任意一个非空白字符
-
re_str = r'abc\S123' result = fullmatch(re_str, 'abc=123') print(result)
-
-
[字符集] - 匹配字符集中的任意一个字符
-
注意: 一个[]只能匹配一个字
-
# 匹配一个三位的字符串, 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, 'x2y')) re_str = r'x[mn\d]y' #相当于: r'x[mn0123456789]y' print(fullmatch(re_str,'xmy')) print(fullmatch(re_str,'xny')) print(fullmatch(re_str,'x0y')) print(fullmatch(re_str,'x4y')) re_str = r'x[1-7]y' # 相当于r'x[1234567]y' print(fullmatch(re_str,'x2y')) print(fullmatch(re_str,'x5y')) print(fullmatch(re_str,'xhy')) print(fullmatch(re_str,'x9y')) re_str = r'x[A-Z]y' # x和y之间一个任意大写字母 print(fullmatch(re_str, 'xOy')) print(fullmatch(re_str, 'x4y')) re_str = r'x[\da-zA-Z]y' print(fullmatch(re_str, 'x0y')) print(fullmatch(re_str, 'xsy')) print(fullmatch(re_str, 'xUy')) print(fullmatch(re_str, 'x-y'))
-
-
[^字符集] - 匹配不在字符集中的任意一个字符
-
re_str = r'x[^a-z]y' print(fullmatch(re_str, 'xhy')) print(fullmatch(re_str, 'x9y')) print(fullmatch(re_str, 'x-y'))
-
-
-