生成器的throw和close方法
def gen_func():
try:
yield 1
except Exception as e:
pass
yield 2
yield 3
yield 4
yield 5
return "bobby" if __name__ == "__main__":
gen = gen_func()
print(next(gen))
a=gen.throw(Exception, "download error")
print (a)#2
print(next(gen))#注意,打印的是3不是2
throw有两方面的作用,首先是抛给生成器一个异常,然后如果生成器能处理掉异常的话,throw方法接着迭代一次取得返回值,比如上面这个案例就抛给了生成器一个Exception异常,然后生成器处理掉了。注意,捕获异常是在上一次迭代中断的位置捕获,因为每次生成器运行的时候,都是从上一次发生yield中断的地方开始运行,所以抛来的异常发生在这个地方,捕获当然也要在这个地方。因为这个例子中异常被处理了,所以throw方法要完成他的第二张任务:让生成器迭代一次。于是,a为2
再说close,他只有一个作用,就是像生成器抛出GeneratorExit异常。
def myGenerator():
try:
yield 1
yield 2
except GeneratorExit:
print ("aa")
#yield 如果加上这句话,则生成器抛出runtimeerror,close与前面文章GeneratorExit的最后一个例子中的del不同,这个runtimeerror主程序不会忽略,主程序因此异常而退出 gen = myGenerator()
print (next(gen))
gen.close()
print ('bb') '''
aa
bb
'''
关于xlose,可参考
https://blog.csdn.net/hedan2013/article/details/72811117
的论述:
GeneratorExit异常的产生意味着生成器对象的生命周期已经结束。因此,一旦产生了GeneratorExit异常,生成器方法后续执行的语句中,不能再有yield语句,否则会产生RuntimeError。
生成器的throw和close方法的更多相关文章
- python随用随学20200221-生成器中的send(),throw()和close()方法
send()方法 文档定义 generator.send(value) Resumes the execution and "sends" a value into the gen ...
- 迭代器,for循环本质,生成器,常用内置方法,面向过程编程
一.迭代器 1.迭代:更新换代(重复)的过程,每次的迭代都必须基于上一次的结果 迭代器:迭代取值的工具 2.迭代器给你提供了一种不依赖于索引取值的方式 3.可以迭代取值的对象:字符串,列表,元组,字典 ...
- 协程和异步io
一. 并发.并行.同步.异步.阻塞.非阻塞 1.并发:是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机(CPU)上运行,但任一个时刻点上只有一个程序在处理机上运 ...
- gj12-2 协程和异步io
12.3 epoll+回调+事件循环方式url import socket from urllib.parse import urlparse # 使用非阻塞io完成http请求 def get_ur ...
- python yield from (二)
#pep380 #1. RESULT = yield from EXPR可以简化成下面这样 #一些说明 """ _i:子生成器,同时也是一个迭代器 _y:子生成器生产的值 ...
- 第十一章:Python高级编程-协程和异步IO
第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...
- Python的生成器send()方法 & yield_from
生成器对象是一个迭代器.但是它比迭代器对象多了一些方法,它们包括send方法,throw方法和close方法.这些方法,主要是用于外部与生成器对象的交互.本文先介绍send方法. send send方 ...
- Python学习之旅—生成器对象的send方法详解
前言 在上一篇博客中,笔者带大家一起探讨了生成器与迭代器的本质原理和使用,本次博客将重点聚焦于生成器对象的send方法. 一.send方法详解 我们知道生成器对象本质上是一个迭代器.但是它比迭代器对 ...
- python特性(八):生成器对象的send方法
生成器对象是一个迭代器.但是它比迭代器对象多了一些方法,它们包括send方法,throw方法和close方法.这些方法,主要是用于外部与生成器对象的交互.本文先介绍send方法. send方法有一个参 ...
随机推荐
- 灰度发布/AB test
背景 互联网产品有一个特点,就是不停的升级,升级,再升级.一般采用敏捷开发的团队,基本上保持每周一次的发布频率,系统升级总是伴随着风险,新旧版本兼容的风险,用户使用习惯突然改变而造成用户流失的风险,系 ...
- JavaScript 正整数正则表达式
function testNumber(){ var yourinputValue=$("#yourinputId").val(); var reg = /^[1-9]\d*$/ ...
- 斯坦福大学公开课机器学习:machine learning system design | data for machine learning(数据量很大时,学习算法表现比较好的原理)
下图为四种不同算法应用在不同大小数据量时的表现,可以看出,随着数据量的增大,算法的表现趋于接近.即不管多么糟糕的算法,数据量非常大的时候,算法表现也可以很好. 数据量很大时,学习算法表现比较好的原理: ...
- mfc01
1.解决不能将参数1从“const char []”转换为“LPCTSTR” ,使用多字节字符集.
- 打印慢sql的日志
- UltraCompare文件内容比较工具
http://www.52pojie.cn/thread-541895-1-1.html 云盘里有<ignore_js_op> <ignore_js_op> UltraComp ...
- Error:Failed to resolve: :Base:
这个问题是变通了一下,原来是: //implementation(name: "Base", ext: "aar") 修改成: implementation f ...
- Vue(基础六)_vue-router
一.前言 本文主要涉及: 1.传统方式路由的实现 2.使用vue-router ...
- Excel:6种多条件查找方法
如下图所示,要求根据设备分类和品牌来查找相应的销售数量. 1. 使用VLOOKUP+辅助列进行多条件查找 本例采用的方法是在原表的最前面加一辅助列,辅助列的公式为:=B2&C2 然后再采用VL ...
- python对象继承
继承允许我们在两个或者更多的类之间创建一种“是一个”的关系,这种关系把共同的细节抽象到一个超类里. 从技术上讲,每一个我们创建的类都使用了继承,所有的python类都是一个叫做object的特殊类的子 ...