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异常来处理终止情况,其它异常不行。