首页 > StopIteration的抛出问题

StopIteration的抛出问题

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

问题在于为什么要在read_line外面套一层try except,直接让read_line抛出不就好了么,像这样:

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

因为get_log_lines使用的是yield,这个函数执行后会返回一个Generator。
Generator像iterator一样需要使用StopIteration异常来处理终止情况,其它异常不行。

【热门文章】
【热门文章】