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 块实际上并没有在这里做任何事情,但他可能包含了它以便您可以看到循环将如何被破坏。
我在阅读函数式编程时遇到问题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 块实际上并没有在这里做任何事情,但他可能包含了它以便您可以看到循环将如何被破坏。