生成器的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方法有一个参 ...
随机推荐
- matlab 下标类型
double int uint time: double = int < uint8 较为神奇. clear clc time=clock; a=zeros(,); : a(i)=; end f ...
- 斯坦福大学公开课机器学习:machine learning system design | data for machine learning(数据量很大时,学习算法表现比较好的原理)
下图为四种不同算法应用在不同大小数据量时的表现,可以看出,随着数据量的增大,算法的表现趋于接近.即不管多么糟糕的算法,数据量非常大的时候,算法表现也可以很好. 数据量很大时,学习算法表现比较好的原理: ...
- 4.1、实现4个LED灯同时闪烁
图中可以看出,P1的0.1.3.4引脚分别连接着4个LED.控制引脚状态,来控制LED. #include "ioCC2530.h" //引用CC2530头文件 /******** ...
- Windows7安装程序无法定位现有系统分区,也无法创建新的系统分区
解决Windows7.Windows8系统安装时“安装程序无法定位现有系统分区,也无法创建新的系统分区”提示. 方法一 把Windows7镜像发在你电脑的非系统盘的其他硬盘上. 重启机器,通过U盘启动 ...
- Linux系统下DNS主从配置详解
一.DNS概述DNS(Domain Name System),即域名系统.因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串. ...
- 三台机器之间ssh互信配置
三台机器之间ssh互信配置 环境介绍:192.168.65.128 my1-222192.168.65.129 my2-223192.168.65.130 web224 # 步骤一:# ...
- docker的使用 -- windows
1. 下载docker desktop https://www.docker.com/products/docker-desktop 更多操作指令 ps: 值得注意的是,刚下载下来的docker只能在 ...
- E2E测试框架
1. 目前E2E测试工具有哪些? 项目 Web Star puppeteer Chromium (~170Mb Mac, ~282Mb Linux, ~280Mb Win) 41427 nightma ...
- 理解I/O:随机和顺序
转自:https://blog.csdn.net/BaiWfg2/article/details/52885287 原文:http://www.violin-memory.com/blog/under ...
- script weixin app / weixin xiao chen xu
s 开发人员: 1.设置权限程序员管理人员-管理体验者-配置测试人员的真实微信号2.微信小程序的后台-上传体验版代码-生成体验码二维码测试人员: 1.你的台式机/笔记本申请内外网.有usb权限2.有W ...