国产99视频精品免视看6

    1. <em id="yud1w"><acronym id="yud1w"><u id="yud1w"></u></acronym></em>
      
      
      <button id="yud1w"></button>

      python

      当前位置:首页?>?python高级知识?>?当前文章

      python高级知识

      生成器close()方法详解(StopIteration,GeneratorExit,RuntimeError)

      2020-05-18 138赞 python中国网
      每篇文章努力于解决一个问题!python高级、python面试全套、操作系统经典课等可移步文章底部。

        关于生成器的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.bdd33.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 
          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.bdd33.com')
      
      gen = test()
      print(next(gen))  # 生成器启动
      gen.close()
      
      
      1
      GeneratorExit抛出
      我爱www.bdd33.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, in 
          gen.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
      
      

      文章评论

      生成器close()方法详解(StopIteration,GeneratorExit,RuntimeError)文章写得不错,值得赞赏
      国产99视频精品免视看6