协程的基础已经学了,现在学习其他的一些特性,停止生成器之后再next会异常为StopIteration,close通过GenertorExit接受异常信息.他是 基于BaseExceptions的.
def gen_func():try:yield "https://www.baidu.com"except GeneratorExit: # 基于BaseExceptionspass # 如果这个协程raise Stopiteration的话也不会抛出异常yield 2 # 如果下面没有的话,close是不会抛异常的yield 3return "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 异常passyield 2try:yield 3except Exception as e:passyield 3yield 2return "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))