采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
请教下老师,这里不应该是返回2吗?三个yied,第一次调用next()再调用gen.throw()捕获第一个yied的异常,再调用next(gen)不应该返回2吗?为什么是3?
throw方法。它的实现手段是通过向生成器对象在下次被挂起处,抛出一个异常。之后会继续执行生成器对象中后面的语句,直至遇到下一个yield语句返回,我们来理解一下这句话:
里面最重要的信息是 "生成器对象在上次被挂起处"
当我们第一次调用 next(gen)之后就会print出url,然后就会挂起,当调用gen.throw之后会驱动gen继续执行到下一个yield 2处,所以gen.throw已经驱动生成器执行了,所以当你再次调用next的时候会直接执行到yield 3 了
print(gen.throw(Exception, "download error")) 会打印 2
对呀,我也是一模一样的疑问?为什么是3呢?
代码就是老师自己的代码,讲课的时候也是3
你把代码贴出来 我在本地运行一下试试
登录后可查看更多问答,登录/注册
socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO
1.2k 31
1.1k 24
1.1k 16
1.5k 10
1.1k 9