send
1. yield可以产出值,可以接收值
2. 在调用send发送非none值之前,我们必须启动一次生成器, 方式有两种
a. gen.send(None)
b. next(gen)
def gen_func(): #1. 可以产出值, 2. 可以接收值(调用方传递进来的值) html = yield 1 print(html) yield 2 yield 3 return "bobby" #1. 生成器不只可以产出值,还可以接收值 if __name__ == "__main__": gen = gen_func() #在调用send发送非none值之前,我们必须启动一次生成器, 方式有两种1. gen.send(None), 2. next(gen) url = gen.send(None) #download url html = "bobby" print(gen.send(html)) #send方法可以传递值进入生成器内部,同时还可以重启生成器执行到下一个yield位置 print(gen.send(html))
close
不要随便try catch
def gen_func(): yield "http://projectsedu.com" yield 2 yield 3 return "bobby" if __name__ == "__main__": gen = gen_func() print(next(gen)) gen.close() print(next(gen)) print("bobby")
throw
在yield地方进行捕捉,而不是下一个yield
def gen_func(): #1. 可以产出值, 2. 可以接收值(调用方传递进来的值) try: yield "http://projectsedu.com" except Exception as e: pass try: yield 2 except Exception as e: pass yield 3 return "bobby" if __name__ == "__main__": gen = gen_func() print(next(gen)) gen.throw(Exception, "download error") print(next(gen)) gen.throw(Exception, "download error1")
原文地址:https://www.cnblogs.com/callyblog/p/11183778.html
时间: 2024-10-10 07:54:41