For循环中捕获StopIteration错误消息

时间:2015-08-26 19:26:16

标签: python exception exception-handling generator stopiteration

我的代码与此结构相似:

def my_gen(some_str):
    if some_str == "":
        raise StopIteration("Input was empty")
    else:
        parsed_list = parse_my_string(some_str)
        for p in parsed_list:
            x, y = p.split()
            yield x, y

for x, y in my_gen()
    # do stuff
    # I want to capture the error message from StopIteration if it was raised manually

是否可以通过使用for循环来完成此操作?我在其他地方找不到类似的案例。 如果不能使用for循环,还有什么其他选择?

由于

1 个答案:

答案 0 :(得分:2)

你不能在for循环中执行此操作 - 因为for循环将隐式捕获StopIteration异常。

实现这一目标的一种可能方法是无限期:

while True:
    try:
        obj = next(my_gen)
    except StopIteration:
        break

print('Done')

或者您可以使用任意数量的consumers from the itertools library - 请查看底部的食谱部分。