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)打印不出任何结果。
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__。