zoukankan      html  css  js  c++  java
  • Python异常捕捉的一个小问题

    问题:

    names = ['taotao','songwenjing','liu','li']
    I = iter(names)
    while True:
    try:
    s = next(I)
    except Exception as err:
    print(err)
    break
    print(s)

    为什么这段代码运行不打印err也是就是StopIteration呢?

    ----------------------------------------------------------------------------------

     names = ['taotao','songwenjing','liu','li']
    l = iter(names)

    while True:
        try:
            s = next(l)
        except Exception as err:
            print(err)
            #break                        #把这个break注释掉,发现print(err)打印的是一个空行,而且循环还在执行,说明没有捕获到异常
        print(s)

    # taotao
    # songwenjing
    # liu
    # li
    #
    # li
    #
    # li


    #下一步探究为什么没有捕获到StopIteration异常

    names = ['taotao','songwenjing','liu','li']
    l = iter(names)

    while True:
        try:
            s = next(l)
        except Exception as err:
            print(type(err))
            break 
        print(s)
    # taotao
    # songwenjing
    # liu
    # li
    # <class 'StopIteration'>

    由结果可知,是捕捉到了StopIteration的一个实例,可能是由于StopIteration类没有实现__str__()方法,故print(err)打印不出任何结果。
     
     __str__:在将对象转换成字符串  str(对象)  测试的时候,打印对象的信息,__str__方法必须要return一个字符串类型的返回值,作为对实例对象的字符串描述,__str__实际上是被print函数默认调用的,当要print(实例对象)时,默认调用__str__方法,将其字符串描述返回。如果不是要用str()函数转换。当你打印一个类的时候,那么print首先调用的就是类里面的定义的__str__。

     
     
     
     
  • 相关阅读:
    VC常用代码
    richedit
    vc++ 2005 发布程序
    管道应用之捕获控制台程序信息
    黑客基础知识编程(转)
    Get All IE Info from win32 api
    vc 界面编程常用方法(http://blog.emuch.net/244485/spacelistblogitemtypeid2708.html)
    使用ADO调用存储过程
    在C#中如何实现文件夹的复制(转)
    C语言开发病毒程序(转)
  • 原文地址:https://www.cnblogs.com/avention/p/9879452.html
Copyright © 2011-2022 走看看