python类型转换异常捕捉_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

由结果可知,是捕捉到了StopIteration的一个实例,可能是由于StopIteration类没有实现__str__()方法,故print(err)打印不出任何结果。

__str__:在将对象转换成字符串  str(对象)  测试的时候,打印对象的信息,__str__方法必须要return一个字符串类型的返回值,作为对实例对象的字符串描述,__str__实际上是被print函数默认调用的,当要print(实例对象)时,默认调用__str__方法,将其字符串描述返回。如果不是要用str()函数转换。当你打印一个类的时候,那么print首先调用的就是类里面的定义的__str__。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值