我在阅读函数式编程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)
答案 0 :(得分:3)
我认为没有任何理由保留try...except
。例如,重新加注仍将带有相同的回溯,因此发电机的行为在那里保持不变。
换句话说,那里没有意义,也许是重构的遗留物。
您可以进一步简化循环,删除多余的第一行:
def get_log_lines(log_file):
while True:
line = read_line(log_file)
if complex_condition(line):
yield line
答案 1 :(得分:0)
作者正在写一个例子。虽然try ... catch块实际上并没有在这里做任何事情,但他可能包含它以便你可以看到循环如何被破坏。