该itertools.iter_except
食谱封装这个想法“重复调用的函数,直到产生一个异常”的。它类似于已接受的答案,但是配方提供了一个迭代器。
从食谱:
def iter_except(func, exception, first=None):
""" Call a function repeatedly until an exception is raised."""
try:
if first is not None:
yield first()
while True:
yield func()
except exception:
pass
您当然可以直接实现后者的代码。为了方便起见,我使用了一个单独的库,more_itertools
该库为我们实现了此食谱(可选)。
码
import more_itertools as mit
list(mit.iter_except([0, 1, 2].pop, IndexError))
细节
在这里,pop
方法(或给定的函数)针对列表对象的每次迭代被调用,直到IndexError
引发an为止。
对于您的情况,给定一些connect_function
预期的错误,您可以使迭代器重复调用该函数,直到引发异常为止,例如
mit.iter_except(connect_function, ConnectionError)
在这一点上,通过循环遍历或调用,将其与其他任何迭代器一样对待next()
。