close的方法主要是关闭子生成器,需要注意的有4点:
1.如果生成器close后,还继续next,会报错StopIteration
[图片]![](https://img2018.cnblogs.com/blog/1460620/201812/1460620-20181208094706830-662957266.jpg)
![](https://img2018.cnblogs.com/blog/1460620/201812/1460620-20181208094706830-662957266.jpg)
2.如果我捕获了异常,将GeneratorExit处理了,之后还有一个yield,这时候close之后,还要next会报错RuntimeError异常
![](https://img2018.cnblogs.com/blog/1460620/201812/1460620-20181208094807401-396038282.jpg)
3. 如果我close之后的代码没有next,另外yield的捕获异常之后也没有yield,那么代码不报错,正常执行
![](https://img2018.cnblogs.com/blog/1460620/201812/1460620-20181208094813476-740803253.jpg)
4.如果在yield捕或GeneratorExit之后,raise StopIteration方法,close之后也不next,那么代码也不抛出异常,因为子生成器抛出的StopIteration的方法,委托生成器会继续执行,不会影响
![](https://img2018.cnblogs.com/blog/1460620/201812/1460620-20181208094818289-790331020.jpg)
5.如果我close之后,不在next,另外yield中也不捕获异常,代码正常