协程的基础已经学了,现在学习其他的一些特性,停止生成器之后再next会异常为StopIteration,close通过GenertorExit接受异常信息.他是 基于BaseExceptions的.
def gen_func():
try:
yield "https://www.baidu.com"
except GeneratorExit: # 基于BaseExceptions
pass # 如果这个协程raise Stopiteration的话也不会抛出异常
yield 2 # 如果下面没有的话,close是不会抛异常的
yield 3
return "caicai"
if __name__ =="__main__":
gen = gen_func()
print(next(gen))
gen.close()# 停止这个生成器
print(123)
next(gen)
再继续往深点,自定义异常信息.如果添加异常之后,下一个yield会被占用
def gen_func():
try:
yield "https://www.baidu.com"
except Exception: # pass 异常
pass
yield 2
try:
yield 3
except Exception as e:
pass
yield 3
yield 2
return "caicai"
if __name__ =="__main__":
gen = gen_func()
print(next(gen))
gen.throw(Exception,"this is error")# 给上一个添加异常 ,第二个yeild会被占用
print(next(gen))
gen.throw(Exception,"this is error")# 给上一个添加异常,并且下一个yeild会被占用
print(next(gen))