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)
阅读 16.2k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题