请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

第一次调用gen.throw()再调用print(next(gen))返回yied 3

图片描述
请教下老师,这里不应该是返回2吗?三个yied,第一次调用next()再调用gen.throw()捕获第一个yied的异常,再调用next(gen)不应该返回2吗?为什么是3?

正在回答 回答被采纳积分+3

3回答

bobby 2019-02-13 18:03:14

throw方法。它的实现手段是通过向生成器对象在下次被挂起处,抛出一个异常。之后会继续执行生成器对象中后面的语句,直至遇到下一个yield语句返回,我们来理解一下这句话:

    里面最重要的信息是 "生成器对象在上次被挂起处"

当我们第一次调用 next(gen)之后就会print出url,然后就会挂起,当调用gen.throw之后会驱动gen继续执行到下一个yield 2处,所以gen.throw已经驱动生成器执行了,所以当你再次调用next的时候会直接执行到yield 3 了

1 回复 有任何疑惑可以回复我~
  • print(gen.throw(Exception, "download error"))  会打印 2
    回复 有任何疑惑可以回复我~ 2019-05-09 11:20:50
wireless_ZDJ 2019-02-12 22:25:37

对呀,我也是一模一样的疑问?为什么是3呢?

代码就是老师自己的代码,讲课的时候也是3

0 回复 有任何疑惑可以回复我~
bobby 2018-11-03 10:05:48

你把代码贴出来 我在本地运行一下试试

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信