iterable = iter([1,2])
deffunc(iterable):whileTrue:
try:
print("ok")
print(next(iterable))
print("not ok")
except StopIteration:
print("I have already try try")
breakreturn"ok and not ok"
func(iterable)
运行结果:
ok
1not ok
ok
2not ok
ok
I have already trytry#当iterable无数值时,抛出异常,捕获处理
案列2
根据案列,将案列1演变为函数本身就是迭代器
iterable = iter([1,2])
deffunc(iterable):whileTrue:
try:
print("ok")
yield next(iterable)
print("not ok")
except StopIteration:
print("I have already try try")
breakreturn"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 trytry#地三次进入后,next(iterable)已经无值了,因此抛出异常后,捕获执行。#但是最后一次print本身又再次抛出异常,所以会出现共计两次错误
File "D:/PycharmProjects/untitled1/5moth/512/exec.py", line 17, in <module>
print(next(g))
StopIteration: ok andnot ok