send

1. yield可以产出值,可以接收值

2. 在调用send发送非none值之前,我们必须启动一次生成器, 方式有两种

  a. gen.send(None)

  b. next(gen)

def gen_func():#1. 可以产出值, 2. 可以接收值(调用方传递进来的值)html = yield 1print(html)yield 2yield 3return "bobby"#1. 生成器不只可以产出值,还可以接收值
if __name__ == "__main__":gen = gen_func()#在调用send发送非none值之前,我们必须启动一次生成器, 方式有两种1. gen.send(None), 2. next(gen)url = gen.send(None)#download urlhtml = "bobby"print(gen.send(html)) #send方法可以传递值进入生成器内部,同时还可以重启生成器执行到下一个yield位置print(gen.send(html))

close

 不要随便try catch

def gen_func():yield "http://projectsedu.com"yield 2yield 3return "bobby"if __name__ == "__main__":gen = gen_func()print(next(gen))gen.close()print(next(gen))print("bobby")

如果要捕获异常,那么必须抛出StopIteration

def gen_func():try:yield "http://projectsedu.com"except GeneratorExit:raise StopIterationyield 2yield 3return "bobby"if __name__ == "__main__":gen = gen_func()print(next(gen))gen.close()print(next(gen))print("bobby")

throw

在yield地方进行捕捉,而不是下一个yield;生成器在return的时候会抛出一个StopIteration,这个异常会一直向上抛出(跟普通的异常一样向上抛出)

def gen_func():#1. 可以产出值, 2. 可以接收值(调用方传递进来的值)try:yield "http://projectsedu.com"except Exception as e:passtry:yield 2except Exception as e:passyield 3return "bobby"if __name__ == "__main__":gen = gen_func()print(next(gen))gen.throw(Exception, "download error") # 实际是 yield "http://projectsedu.com" 抛出异常
  print(next(gen))   gen.throw(Exception, "download error1")

 

转载于:https://www.cnblogs.com/callyblog/p/11183778.html

python yield: send, close, throw相关推荐

  1. python throw_Python 生成器与它的 send,throw,close 方法(转帖以及记录)

    Python 生成器与它的 send,throw,close 方法 在生成器中,无论生成器是什么状态,都可以直接使用throw与close. 生成器这一块,对于next,send网上的介绍比较多,但对 ...

  2. Python协程:从yield/send到async/await

    这个文章理好了脉落. http://python.jobbole.com/86069/ 我练 习了一番,感受好了很多... Python由于众所周知的GIL的原因,导致其线程无法发挥多核的并行计算能力 ...

  3. python yield关键字全面解析

    你是否曾因处理的数据集过大而内存溢出?你是否曾因为处理各种复杂的函数状态而烦恼?It does help! 本文聚焦yield generator, 帮助你解锁python进阶技法,写出更优雅的程序! ...

  4. Python yield 详解(嚼碎了喂你,一篇精通,无需再看其他文章)

    Python yield详解 文章目录 Python yield详解 由"斐波那契"深入理解yield案例 第一个版本 第二个版本 问题的引出 第三个版本 第四个版本 总结 细化总 ...

  5. python yield 用法详解

    python yield 生成器 文章目录 python yield 生成器 1. 背景 2. 如何生成斐波那契數列 清单 1. 简单输出斐波那契數列前 N 个数 清单 2. 输出斐波那契數列前 N ...

  6. Python yield 斐波那契数列

    原文:https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ Python yield 使用浅析 您可能听说过,带有 ...

  7. 2020-12-11 Python yield 使用浅析

    Python yield 使用浅析 您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ? 我们先抛开 generator,以一 ...

  8. 1、【转载】Python yield 使用浅析

    1.[转载]Python yield 使用浅析 [注:此文转载自https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ ...

  9. Python yield generator

    http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/, Python yield 使用浅析 这篇说的很清楚 主要看到F ...

最新文章

  1. NameNode任务线程之FSNamesystem$ReplicationMonitor
  2. 服务器的攻与防(firewall 禁止指定Ip)
  3. wordpress搭建个人博客
  4. 混合文件下分离xml文件和jpg文件
  5. 前端学习 -- 内联框架iframe
  6. Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析
  7. Kubernetes 是一个“数据库”吗?
  8. python离散化方法_python中字符串离散化的例子
  9. SimpleDateFormat 类的总结
  10. STM32封装库下载
  11. 信捷XC系列PLC编程软件安装方法
  12. [境内法规]中国人民银行关于防范利用假美元洗钱的通知—银发[2006]第60号
  13. php 覆盖写入txt文件内容,PHP使用内置函数file_put_contents覆盖写入文件及追加内容的方法...
  14. windows无法访问 计算机打印机,windows无法打开添加打印机解决方法
  15. QuerySet,本质上是一个给定的模型的对象列表
  16. Unity Error while downloading Asset Bundle: Failed to decompress data for the AssetBundle
  17. 微信小程序开发 从创建到使用
  18. 洛谷 P3355 骑士共存问题
  19. 【12月英语——快乐中学习】
  20. linux for while语句的使用

热门文章

  1. JPA 系列教程12-复合主键-2个@Id+@IdClass
  2. 【转】JAVA 调用Web Service的方法
  3. Ubuntu 下安装AMBER10/AmberTools 1.2
  4. 狂人日记学习 之一 CSS布局的目的
  5. JavaScript设计模式(二)-- 工厂方法模式
  6. [NOIP10.6模拟赛]2.equation题解--DFS序+线段树
  7. 信息安全系统设计基础第四周学习总结—20135227黄晓妍
  8. apache将请求转发到到tomcat应用
  9. 在cs后台页面获取input的值方法
  10. 【JS】call,apply,bind