转载:python异常之 GeneratorExit
转载地址 https://blog.csdn.net/hedan2013/article/details/72810653
当一个生成器对象被销毁时,会抛出一个GeneratorExit异常。请看下面的代码。
- def myGenerator():
- try:
- yield 1
- except GeneratorExit:
- print "myGenerator exited"
- gen = myGenerator()
- print gen.next()
def myGenerator():
try:
yield 1
except GeneratorExit:
print "myGenerator exited" gen = myGenerator()
print gen.next()
输出结果为
- 1
- myGenerator exited
1
myGenerator exited
上面代码的运行逻辑如下: 当调用到gen.next()方法时,会执行生成器对象方法的yield语句。此后,主程序结束,系统会自动产生一个GeneratorExit异常,被生成器对象方法的Except语句块截获。
而GeneratorExit异常产生的时机,是在生成器对象被销毁之前。为了验证这点,请看下面的代码。
- def myGenerator():
- try:
- yield 1
- yield 2
- except GeneratorExit:
- print "myGenerator exited"
- gen = myGenerator()
- print gen.next()
- del gen
- print "Main caller exited"
def myGenerator():
try:
yield 1
yield 2
except GeneratorExit:
print "myGenerator exited" gen = myGenerator()
print gen.next()
del gen
print "Main caller exited"
输出结果
- 1
- myGenerator exited
- Main caller exited
1
myGenerator exited
Main caller exited
值得一提的是,GeneratorExit异常只有在生成器对象被激活后,才有可能产生。更确切的说,需要至少调用一次生成器对象的next方法后,系统才会产生GeneratorExit异常。请看下面的代码。
- def myGenerator():
- try:
- yield 1
- yield 2
- except GeneratorExit:
- print "myGenerator exited"
- gen = myGenerator()
- del gen
- print "Main caller exited"
def myGenerator():
try:
yield 1
yield 2
except GeneratorExit:
print "myGenerator exited" gen = myGenerator()
del gen
print "Main caller exited"
其输出结果如下:
- Main caller exited
Main caller exited
在上面的示例中,我们都显式地捕获了GeneratorExit异常。如果该异常没有被显式捕获,生成器对象也不会把该异常向主程序抛出。因为GeneratorExit异常定义的初衷,是方便开发者在生成器对象调用结束后定义一些收尾的工作,如释放资源等。
转载:python异常之 GeneratorExit的更多相关文章
- [转载]python异常如何全面捕获
写在前面:最近写python程序,进场遇到异常的问题,因此需要捕获异常.查阅了下资料,整理如下: 常见的异常处理的方法: 假设有下面的一段程序: try: 语句1 语句2 . ...
- python 异常
引用一段来自菜鸟教程的文章:http://www.runoob.com/python/python-exceptions.html Python 异常处理 python提供了两个非常重要的功能来处理p ...
- #21 Python异常
前言 运行程序时经常遇到各种错误,例如:ImportError(导入模块错误).IndexError(索引错误).NameError(变量错误).SyntaxError(语法错误).Indentati ...
- Python异常和异常处理
Python异常和异常处理2017年12月20日 22:17:08 Megustas_JJC 阅读数:114 标签: python 异常处理 更多 个人分类: Python 版权声明:本文为博主原创文 ...
- [转载] Python数据类型知识点全解
[转载] Python数据类型知识点全解 1.字符串 字符串常用功能 name = 'derek' print(name.capitalize()) #首字母大写 Derek print(name.c ...
- python 异常之进阶操作
1.文件分析 下面来做一些文件分析操作,分析整本书的信息. 知识点: string.split():将字符串分解为列表. open(filename,‘rb’)或者open(filename,enco ...
- Python异常类型及包含关系
Python异常类型及包含关系,设计异常捕获时参考: BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- ...
- python——异常except语句用法与引发异常
except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名1,异常名2):捕获异常1或者异常2 except:<异常名>,< ...
- 笔记-python异常信息输出
笔记-python异常信息输出 1. 异常信息输出 python异常捕获使用try-except-else-finally语句: 在except 语句中可以使用except as e,然后通 ...
随机推荐
- 图片转化成base64编码
var img = "imgurl";//imgurl 就是你的图片路径 function getBase64Image(img) { var canvas = document. ...
- c#switch语句的用法
switch条件语句是一种很常用的选择语句,它与if条件语句不同,它只针对某个表达式的值作出判断,从而决定执行哪一段代码. switch条件语句用到的关键字: switch case break de ...
- React条件渲染
传参判断 class LoginControl extends React.Component { constructor(props) { super(props); this.handleLogi ...
- 面试常问MySQL性能优化问题
知识综述: [1] MySQL中锁的种类: 常见的表锁和行锁,也有Metadata Lock等等,表锁是对一整张表加锁,分为读锁和写锁,因为是锁住整张表,所以会导致并发能力下降,一般是做ddl处理时使 ...
- 颜色空间的转换系列 (一) ——RGB2XYZ/LAB
http://www.wk78.com/forum.php?mod=forumdisplay&fid=2&page=1 文件在论坛. 然后需要解决一个问题: 我直接复制过来了,自己看吧 ...
- Hibernate Search集与lucene分词查询
lucene分词查询参考信息:https://blog.csdn.net/dm_vincent/article/details/40707857
- java mybatis后台判断表是否存在mysql
<select id="isTableExist" parameterType="string" resultType="int"&g ...
- True和数字相加的结果
num = 5 print(num + True) # 其结果为6
- MIP如何为页面加速?
MIP是近日由百度发起的开源项目,它的核心是一套应用于移动网页的开放性技术标准,通过提供MIP-HTML规范.MIP-JS运行环境以及MIP-Cache页面缓存系统,实现移动网页加速. 换言之就是,M ...
- 关于第一个launcher开发笔记
本笔记主要记录阅读关于launcher代码是的相关知识点. viewpager的简单使用(适配器模式):https://www.cnblogs.com/fuly550871915/p/4922953. ...