day15_json和异常捕获

周安排

json
异常捕获
面向对象和正则
邮件自动发送
word和excel
pdf文件操作

回顾

基本步骤:打开文件 - 操作文件 - 关闭

open(file,mode = 'r',*,encoding=None)

文件对象.read()

文件对象.write()

文件对象.readline()

文件对象.close()的方式

方式1:手动关闭文件

文件对象 = open(路径,打开方式,encoding = 编码方式)

操作文件

文件对象.close()

方式2:自动关闭文件

with open('test.txt','r',encoding = 'utf-8') as f:
print(f.read())

数据持久化

1)用文件操作需要持久化的数据

2)在需要这个数据的时候从文件中读取数据

3)数据发送改变后,需要将最新的数据写入到文件

新知识

json

1. 什么是json数据

json是一种通用的数据格式,主要用于不同语言之间的数据传输

json数据格式要求:

1)有且只有一个数据

2)唯一的这个数据必须是json支持的数据类型

json支持的数据类型:

数字类型 - 包含所有的数字,表示的时候直接写

字符串 - 双引号引起来,只能是双引号,“hello!!”

布尔值 - 小写true,false

空值 - null

数组 - 相当于列表,[元素1,元素2…]

字典 - {键1:值1,键2:值2…}

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

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

1)json转python

json--------->python

数字 int、float

字符串 str(可能会将双引号变成单引号)

布尔 True\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}') # 不合法
result = json.loads('{"a":100,"b":200}') # <class 'dict'>
result = json.loads('{"a":100,"b":200,"c":true}') # {'a': 100, 'b': 200, 'c': True} <class 'dict'>
2) python 转json

python ---------->json

int\float 数字

str 字符串(引号会变成双引号)

bool 布尔,True\False---->true\false

None null

list、tuple 数组

dict 字典(key会加双引号)

其他的。例如set的python数据类型,不能直接转化成json数据。要先转为其他的python数据类型

json.dumps(python 数据) - 将python数据转化成json格式的字符串

result = json.dumps(100)
print(result)
# 100
result = json.dumps([100,'abc',True,None])
print(result,type(result))
# [100, "abc", true, null] <class 'str'>

异常捕获

1. 什么是异常

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

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

2. 异常捕获

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

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

因为使用者使用不当导致的异常,这个时候才需要对异常进行捕获

3. 捕获异常

方式1:捕获所有类型的异常
try:
    代码段1(需要捕获异常的代码)
except:
	代码段2
try:
    age = int(input('请输入年龄'))
    if age>18:
        print('成年')
    else:
        print('未成年')
except:
    print('输入有误')

执行过程:先执行代码段1,如果执行过程没有出现异常,不会执行代码段2,直接执行后面的其他语句;

如果执行代码段1的时候出现异常,直接执行代码段2,执行完代码段2再执行后面的其他语句。

方式2:捕获指定类型异常
try:
    代码段1(需要捕获异常的代码)
except 异常类型:
	代码段2
try:
    print([10,20][3])
except IndexError:
    print('出现异常')
方法3: 同时捕获多种异常,针对不同的异常做相同的处理
try:
    代码段1
except (异常类型1,  异常类型2, 异常类型3,...):
    代码段2
方法4:同时捕获多种异常,然后针对不同的异常做不一样的处理
try:
    代码段1
except 异常类型1:
    代码段11
except 异常类型2:
    代码段22
....

finally - 写遗书

try:
    需要捕获异常的代码段
except:
    捕获到异常后需要执行的代码段
finally:
    代码段

finally后面的代码段不管try后面发送了什么,都会执行

1)try后面的代码没有异常,代码段会执行

2)try后面的代码出现异常被捕获到,代码段会执行

3)try后面的代码出现异常没有捕获到,代码段会执行

try:
    print('asc')[3]
    print('asc')
except KeyError:
    print('捕获到异常')
finally:
    print('再见')
# asc
# 再见

5. 抛出异常

主动让程序崩溃

语法:raise 异常类型

class AgeError(Exception):
    def __str__(self):
        return '年龄值错误,年龄的有效范围是0-200'
age = 233
if age>0 or age<0:
    raise AgeError(Exception)
#    raise AgeError(Exception)
#__main__.AgeError: 年龄值错误,年龄的有效范围是0-200    

if age > 200 < 0:等价于if age > 200 and 200 < 0

6. 正则表达式

import re
message = 'msh12哈哈哈340计算机哦9生成摘'
result = re.sub(f'\d+','+',message)
print(result)
1.什么是正则表达式

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

fullmatch(正则表达式,字符串) - 让正则表达式和字符串进行完全匹配
正则表达式:r’正则表达式’ - python;
js:/正则表达式/

2. 正则语法(不是python特有的,在不同的语言中使用的语法大同小异)
1) 普通字符 - 在正则表达式中表示符号本身的字符
2) . ------匹配一个任意字符

r’abc.’ — 匹配一个字符串前三个字符分别是abc,最后一个字符是任意字符

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

r’1…2’ - 匹配有四个字符,第一个字符是1,最后一个是2,中间两个任意

3)\d ----匹配一个任意数字
re_str = r'abc\d'
# 匹配一个字符串,有4个字符,前三个是abc,最后一个字符是任意数字
result = fullmatch(re_str,'abc3')
print(result)
#<re.Match object; span=(0, 4), match='abc3'>

result = fullmatch(re_str,'abcx')
print(result)
#None
4)\D ----匹配任意一个非数字字符
re_str = r'x\Dy'
print(fullmatch(re_str,'x,y'))
#<re.Match object; span=(0, 3), match='x,y'>
5)\s ----匹配一个空白字符

空白字符 - 凡是能产生空白效果的字符,空格,\t,\n

re_str = r'abc\s123'
print(fullmatch(re_str,'abc 123'))
#<re.Match object; span=(0, 7), match='abc 123'>
6)\S ------匹配任意一个非空白字符
re_str = r'abc\S123'
print(fullmatch(re_str,'abc=123'))
#<re.Match object; span=(0, 7), match='abc=123'>
7) [字符集] - 匹配字符集中的任意一个字符

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

#匹配一个字符串有三个字符,第一个字符是x,最后一个字符是y,中间是或者m或者n
re_str = r'x[1mn]y'
print(fullmatch(re_str,'x1y'))
print(fullmatch(re_str,'xxy'))
#<re.Match object; span=(0, 3), match='x1y'>
#None
re_str = r'x[mn\d]y'    # 相当于r'x[mn0123456789]y'
print(fullmatch(re_str,'xny'))
print(fullmatch(re_str,'x1y'))
re_str = r'x[1-7]y'  #相当于r'x[1234567]y'
re_str = r'x[A-Z]y'   # x和y之间有一个大写字符
print(fullmatch(re_str,'xAy'))

re_str = r'x[\da-zA-Z]y'  # x和y之间是一个数字或者字符
print(fullmatch(re_str,'xmy'))
#<re.Match object; span=(0, 3), match='xAy'>
#<re.Match object; span=(0, 3), match='xmy'>
re_str = r'x[,?\da-z]y'  # x和y之间可以是:,?数字小写字符
8) [^字符集] - 匹配不在字符集中的任意一个字符

^必须放在最前面

re_str = r'x[^a-z]y'
print(fullmatch(re_str,'xay'))
print(fullmatch(re_str,'xAy'))
#None
#<re.Match object; span=(0, 3), match='xAy'>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值