第一次调用gen.throw()再调用print(next(gen))返回yied 3
来源:12-7 生成器进阶-send、close和throw方法

qq_未来在哪_0
2018-11-01
请教下老师,这里不应该是返回2吗?三个yied,第一次调用next()再调用gen.throw()捕获第一个yied的异常,再调用next(gen)不应该返回2吗?为什么是3?
写回答
3回答
-
bobby
2019-02-13
throw方法。它的实现手段是通过向生成器对象在下次被挂起处,抛出一个异常。之后会继续执行生成器对象中后面的语句,直至遇到下一个yield语句返回,我们来理解一下这句话:
里面最重要的信息是 "生成器对象在上次被挂起处"
当我们第一次调用 next(gen)之后就会print出url,然后就会挂起,当调用gen.throw之后会驱动gen继续执行到下一个yield 2处,所以gen.throw已经驱动生成器执行了,所以当你再次调用next的时候会直接执行到yield 3 了
112019-05-09 -
wireless_ZDJ
2019-02-12
对呀,我也是一模一样的疑问?为什么是3呢?
代码就是老师自己的代码,讲课的时候也是3
00 -
bobby
2018-11-03
你把代码贴出来 我在本地运行一下试试
00
相似问题
添加回调的问题
回答 1
关于协程调用的几个问题
回答 1