zoukankan      html  css  js  c++  java
  • 生成器的throw和close方法

    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

  • 相关阅读:
    数据结构(复习)链表完结篇
    第三部分_JSP详解续
    第二部分_搭建Java Web开发环境与配置Tomcat服务器&JSP详解
    第一部分_HTTP协议详解&HTML常用控件
    集合框架中的接口及其实现类
    封底估算
    从起泡排序探究算法正确性证明的一般规律
    各种曲线运动、弹球、笔记
    Android 之px于dp在Java代码中的转换
    sqlite之聚合函数的使用
  • 原文地址:https://www.cnblogs.com/topass123/p/13299623.html
Copyright © 2011-2022 走看看