有没有一种方法可以防止不相关的代码抛出StopIteration异常(而不必手动捕获它们)?
示例:loop_all希望遍历myiter迭代器,并在这个迭代器完成后简单地继续执行。除非some_dangerous_method或myiter中的任何其他代码引发StopIteration,否则这种方法是有效的。
def loop_all():
myiter = myiter()
try:
while True:
next(myiter) # <- I want exactly the StopIteration from this next method
except StopIteration:
pass
def myiter():
some_dangerous_method() # what if this also raises a StopIteration?
for i in some_other_iter():
# here may be more code
yield有没有办法清楚地说明代码应该对哪个StopIteration做出反应?
发布于 2012-06-03 08:02:47
如果您正在调用的函数正在调用next(iter),并且没有处理StopIteration,那么该函数就有一个bug。把它修好。
发布于 2012-06-04 00:41:22
也许我遗漏了一些东西,但为什么不简单地这样:
def myiter():
try:
some_dangerous_method()
except StopIteration:
pass # or raise a different exception
for i in some_other_iter():
# here may be more code
yieldhttps://stackoverflow.com/questions/10866838
复制相似问题