学习视频地址:https://www.bilibili.com/video/BV15J411T7WQ?p=130
P130 异常
异常处理:
格式:
try :
可能出现异常的代码
except :
如果有异常执行的代码
finally :
无论是否存在异常都会被执行的代码
情况1:
情况2:获取Exception的错误原因
try :
有可能会产生多种异常
except 异常类型1:
print(。。。)
except 异常类型2:
pass
except Exception as err :
print (err) ----> err的内容就是错误原因:
情况3:
try :
有可能有异常的代码
except 类型1 :
pass
. .
else :
如果try中没有发生异常则进入的代码
注意 : 如果使用else则在try代码中不能出现return
情况4:
try :
有可能有异常的代码
except 类型1 :
pass
. .
finally :
有没有错误都要进行finally
P133 异常抛出
异常抛出: raise 自定义报错内容
格式:
raise 异常类型(‘提示信息’)
P135 列表推导式 字典推导式 集合推导式
列表推导式:
格式:
[表达式 for 变量 in 旧列表 ] 或者 [表达式 for 变量 in 旧列表 if 条件 ]
列表表达式总结:(3种)
集合推导式:
字典推导式:
进程>线程>协程
P137 生成器 应用:协程
生成器定义:
例:
g = (x * 3 for x in range(10))
print(type(g))
print(g)
# 方式1:通过调用__next__() 方式得到元素
print(g.__next__()) # 0
print(g.__next__()) # 3
print(g.__next__()) # 6
print(g.__next__()) # 9
# 方式2:(生成器对象)
# 每调用一次next则会产生一个元素
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g)) # 生成器本来就可以产生10个得到了10个,
# 第11个抛出异常StopIteration
异常更正后:
g = (x * 3 for x in range(10))
try:
while True :
print(next(g))
except:
print('超出范围!')
定义生成器第二种方式:
斐波那契例子:
# 斐波那契函数 0,1,1,2,3,5,8
def fib(length):
a, b = 0, 1
n = 0
while n < length:
yield b # return b + 暂停
a, b = b, a + b
n += 1
return '没有更多元素了'
g = fib(8)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
结果:
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/Demo/代码/16day/71703.py", line 21, in <module>
print(next(g))
StopIteration: 没有更多元素了
send使用:
def gen():
i = 0
while i < 5:
temp = yield i # return 1 + 暂停
print('tenmp', temp)
i += 1
return '没有更多数据'
g = gen()
print(g.send(None))
n1 = g.send('呵呵')
print('n1', n1)
n2 = g.send('哈哈')
print('n2', n2)
应用:<协程>例子:
def task1(n):
for i in range(n):
print('正在搬第{}块砖!'.format(i))
yield None
def task2(n):
for i in range(n):
print('正在听第{}首歌!'.format(i))
yield None
g1 = task1(3)
g2 = task2(3)
while True:
try:
# print(next(g1))
# print(next(g2))
g1.__next__()
g2.__next__()
except:
break
结果:
正在搬第0块砖!
正在听第0首歌!
正在搬第1块砖!
正在听第1首歌!
正在搬第2块砖!
正在听第2首歌!
生成器总结:
定义生成器方式:
1.通过列表推导式方式
g = (x+1 for x in range(6))
2. 函数+yield
def func () :
...
yield
g = func()
产生元素:
1.next(generator) ----> 每次调用都会产生一个新的元素,如果元素产生完毕,再次调用的话都会
产生异常
2.生成器自己的方法:
g.next() : 获取下一个元素
g.send(value) : 向每次生成器调用中传值 注意:第一次调用send(None)
P141 迭代生成器
迭代器与生成器的关系: