StopIteration异常处理分析思想

案列1

  • 函数中局部代码包含迭代器,在跌倒过程中出现问题
iterable = iter([1,2])

def func(iterable):
    while True:
        try:
            print("ok")
            print(next(iterable))
            print("not ok")
        except StopIteration:
            print("I have already try try")
            break
    return "ok and not ok"

func(iterable)

运行结果:
ok
1
not ok
ok
2
not ok
ok
I have already try try #当iterable无数值时,抛出异常,捕获处理

案列2

  • 根据案列,将案列1演变为函数本身就是迭代器
iterable = iter([1,2])

def func(iterable):
    while True:
        try:
            print("ok")
            yield next(iterable)
            print("not ok")
        except StopIteration:
            print("I have already try try")
            break
    return "ok and not ok"

g = func(iterable)
print(next(g))
print(next(g))
print(next(g))
运行结果:
Traceback (most recent call last):
ok  #第一次进入后执行
1   #第一次进入后执行  
not ok  #第一次进入后执行
ok  #第二次进入后执行    
2   #第二次进入后执行
not ok #第二次进入后执行
ok  #第三次进入后执行
I have already try try #地三次进入后,next(iterable)已经无值了,因此抛出异常后,捕获执行。
#但是最后一次print本身又再次抛出异常,所以会出现共计两次错误
File "D:/PycharmProjects/untitled1/5moth/512/exec.py", line 17, in <module>
print(next(g))
StopIteration: ok and not ok 

总结


  • 异常有可能会出现不同的地方,有可能在方法之内出现异常,若在函数体内出现异常,通过捕获处理。
  • 在代码分析过程中一定要判断一共有哪几个点会出现异常,一共会出现多少次异常,捕获了几次异常,如果已经捕获异常了,但是仍然又有异常,说明捕获的异常次数依然不够
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值