码迷,mamicode.com
首页 > 其他好文 > 详细

生成器的throw和close方法

时间:2020-07-14 16:32:23      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:因此   地方   erro   tps   返回   UNC   中断   任务   案例   

throw有两方面的作用,首先是抛给生成器一个异常,然后如果生成器能处理掉异常的话,throw方法接着迭代一次取得返回值,
比如上面这个案例就抛给了生成器一个Exception异常,然后生成器处理掉了。注意,捕获异常是在上一次迭代中断的位置捕获,
因为每次生成器运行的时候,都是从上一次发生yield中断的地方开始运行,所以抛来的异常发生在这个地方,捕获当然也要在这个地方。
因为这个例子中异常被处理了,所以throw方法要完成他的第二张任务:让生成器迭代一次。于是,a为2
def gen_func():
    try:
        yield 1
    except Exception as e:
        pass
    yield 2
    yield 3
    yield 4
    yield 5
    return "bobby"

if __name__ == "__main__":
    gen = gen_func()
    print(next(gen))
    a=gen.throw(Exception, "download error")    print (a)#2
    print(next(gen))#注意,打印的是3不是2

close,他只有一个作用,就是像生成器抛出GeneratorExit异常。

def myGenerator():  
    try:
        yield 1
        yield 2
    except GeneratorExit:
        print ("aa")
    #yield 如果加上这句话,则生成器抛出runtimeerror,close与前面文章GeneratorExit的最后一个例子中的del不同,这个runtimeerror主程序不会忽略,主程序因此异常而退出
 
gen = myGenerator()
print (next(gen))
gen.close()
print (bb)

‘‘‘
aa
bb
‘‘‘

 

参考链接:https://www.cnblogs.com/saolv/p/9853645.html

 

def gen_func():    try:        yield 1    except Exception as e:        pass    yield 2    yield 3    yield 4    yield 5    return "bobby"
if __name__ == "__main__":    gen = gen_func()    print(next(gen))    a=gen.throw(Exception, "download error")    print (a)#2    print(next(gen))#注意,打印的是3不是2

生成器的throw和close方法

标签:因此   地方   erro   tps   返回   UNC   中断   任务   案例   

原文地址:https://www.cnblogs.com/topass123/p/13299623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!