您的位置: 网站首页> python进阶> 当前文章
生成器close()方法详解(StopIteration,GeneratorExit,RuntimeError)
老董-我爱我家房产SEO2020-05-18197围观,150赞
关于生成器的close()方法,本文主要讲解4个方面,通过如下几点可以彻底理解close()方法!
1、生成器使用 close() 方案后就无法再进行迭代,再使用next()函数会抛出 StopIteration 异常。
2、生成器调用 close() 方法会在程序停止运行的位置抛出 GeneratorExit异常 ,但前提是至少调用一次生成器的next方法后系统才会产生GeneratorExit异常,如果生成器没有启动则不会抛出异常。
3、生成器函数内捕获GeneratorExit异常后,可以继续执行剩余的代码,但剩余代码中不能再包含 yield 语句,否则会抛出RuntimeError异常
4、GeneratorExit异常不能通过Exception捕获,Exception是常规异常的基类,而GeneratorExit并不是常规异常的基类,可以通过所有异常的基类BaseException来捕获。
第1点的代码:
def test(num): for i in range(num): yield i print('我爱www.python66.com') gen = test(3) print(next(gen)) gen.close() print(next(gen))
Traceback (most recent call last): File "D:/pyscript/py3script/python66/test2/test.py", line 14, in <module> print(next(gen)) 0 StopIteration
第2点的代码:
# -*- coding: utf-8 -*- def test(): try: yield 1 except GeneratorExit: print('GeneratorExit抛出') gen = test() print(next(gen)) # 生成器启动 gen.close() print('======分界线===========') def test(): try: yield 1 except GeneratorExit: print('GeneratorExit抛出') gen = test() gen.close() # 未启动生成器不会有异常
1 GeneratorExit抛出 ======分界线===========
第3点的代码:
# -*- coding: utf-8 -*- def test(): try: yield 1 except GeneratorExit: print('GeneratorExit抛出') print('我爱www.python66.com') gen = test() print(next(gen)) # 生成器启动 gen.close()
1 GeneratorExit抛出 我爱www.python66.com
# -*- coding: utf-8 -*- def test(): try: yield 1 except GeneratorExit: print('GeneratorExit抛出') yield 2 gen = test() print(next(gen)) gen.close()
1 Traceback (most recent call last): GeneratorExit抛出 File "D:/pyscript/py3script/python66/test2/test.py", line 13, ingen.close() RuntimeError: generator ignored GeneratorExit
第4点的代码:
# -*- coding: utf-8 -*- def test(): try: yield 1 except BaseException: # GeneratorExit的基类 print('GeneratorExit抛出') gen = test() print(next(gen)) gen.close() print('======分界线======') def test(): try: yield 1 except Exception: print('GeneratorExit抛出') gen = test() print(next(gen)) gen.close()
1 GeneratorExit抛出 ======分界线====== 1
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
生成器close()方法详解(StopIteration,GeneratorExit,RuntimeError)文章写得不错,值得赞赏
站点信息
- 网站程序:Laravel
- 客服微信:a772483200