当前位置: 代码迷 >> 综合 >> 异步IO-协程深入close,throw
  详细解决方案

异步IO-协程深入close,throw

热度:28   发布时间:2023-11-16 23:02:41.0

协程的基础已经学了,现在学习其他的一些特性,停止生成器之后再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))

 

  相关解决方案