今日内容总结
1.异常常见的类型
#syntaxerror
语法错误
#Nameerror
变量名没有赋值就直接使用
#Indexerror
索引值超出了范围
#keyerror
字典中不存在该键
#Indentionerror
缩进的问题
2.异常处理的语法结构
1.基本语法结构
try:
待检测的代码
except 错误类型:
针对错误类型解决问题的方式
2.查看错误的类型
try:
待检测的代码(可能出错的代码)
except 错误类型 as e: # e是系统提示的错误信息
针对该错误的解决问题的方式
3.针对不同的错误类型可以制定不同的方案
try:
待检测的代码
except 错误类型1 as e:
针对错误类型1的方案
except 错误类型2 as e:
针对错误类型2的方案
except 错误类型3 as e:
针对错误类型3的方案
...
#此时若待检测的代码中有多个错误但也只会返回最上面(第一个)的错误
4.万能异常 Exception/BaseException
try:
待检测的代码
except Exception as e:
针对常见的错误全部一类处理
5.结合else使用
try:
待检测的代码
except Exception as e:
解决方案
else:
try的子代码没有出任何错误则会执行else后的子代码
6.结合finally的使用:
try:
待检测的代码
except Exception as e:
解决方案
finally:
无论try的代码是否具有错误 最后都会执行finally之后的代码
3.异常处理补充
1.断言
name='xiaochen'
assert isinstance(name,str)
print('是字符串')
2.主动抛出异常
name = 'jason'
if name = 'jason':
raise Exception('报错信息')
else:
print('正常')

4.异常处理实战应用
1.能少用就少用 被检测的代码越少越好 因为占用资源
2.当代码出现无法控制的情况报错才考虑使用(使用软件时断网)
3.使用 while循环来实现 for循环
l1 = [11,22,33,44]
a = l1.__lite__() # 将其变为一个可迭代对象
while True:
try:
print(a.__next__())
#使用__next__()来将数据遍历
except Exception as i: # 自动捕捉异常
pass
使用while循环来实现range的功能
1.两个参数一起来

2.加上第三个参数 (公差)

3.花活(倒叙)

5.生成器对象
1.本质
内置函数__iter__和__next__的迭代器对象
2.区别
迭代器对象是解释器提供的
数据类型\文件对象>>>:迭代器对象
生成器对象是程序员编写出来的
代码 关键字>>>:迭代器对象(生成器)
3.创造生成器的基本语法
函数体代码中填写yield关键字
def my_iter():
print('111')
yield
'''
当函数体代码有yield关键字
那么函数名加括号并不会执行函数体代码
生成一个生成器对象(迭代器对象)
'''
可以使用一个变量名来承接yield后的返回值
#只有再次执行__next__或是加括号被调用才会继续执行函数体代码
每次执行到yield都会停止在yield的位置
#只要在yield后填写就可以自定义返回值
6.yield冷门用法
def eat(name,food=None):
print(f'{name}准备用餐')
while True:
food = yield
print(f'{naem}正在吃{food}')
res = eat('xiaochen')
res.__next__()
res.send('包子') # xiaochen正在吃包子
red.send() # xiaochen正在吃None
# 1.将括号内的数据传给yield前面的变量名 2.再自动调用__next__

7.生成器表达式
简化表达式

特殊用法(面试题) # 记住套路即可
