异步IO-协程深入close,throw

协程的基础已经学了,现在学习其他的一些特性,停止生成器之后再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))
发布了89 篇原创文章 · 获赞 2 · 访问量 2803

猜你喜欢

转载自blog.csdn.net/qq_37463791/article/details/105481264
今日推荐