Python 中的停止迭代

StopIteration in Python

我在阅读函数式编程时遇到问题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)

我认为没有 任何 理由将 try...except 保留在那里。例如,re-raise 仍将带有相同的回溯,因此生成器的行为在那里没有改变。

换句话说,它在那里毫无意义,也许是重构的遗留产物。

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

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

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