Python中的StopIteration

时间:2015-09-18 09:04:15

标签: python exception-handling generator stopiteration

我在阅读函数式编程python时遇到了一个问题。

def get_log_lines(log_file): 
    line = read_line(log_file) 
    while True:
        try:
            if complex_condition(line):
                yield line
            line = read_line(log_file)
        except StopIteration:
            raise

添加try...except语句以包围read_line。为什么不让read_line抛出StopIteration这样的例外:

def get_log_lines(log_file): 
    line = read_line(log_file) 
    while True:
        if complex_condition(line):
            yield line
        line = read_line(log_file)

2 个答案:

答案 0 :(得分:3)

我认为没有任何理由保留try...except。例如,重新加注仍将带有相同的回溯,因此发电机的行为在那里保持不变。

换句话说,那里没有意义,也许是重构的遗留物。

您可以进一步简化循环,删除多余的第一行:

def get_log_lines(log_file): 
    while True:
        line = read_line(log_file) 
        if complex_condition(line):
            yield line

答案 1 :(得分:0)

作者正在写一个例子。虽然try ... catch块实际上并没有在这里做任何事情,但他可能包含它以便你可以看到循环如何被破坏。