异步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))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学渣王菜菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值