【发布时间】:2015-12-15 08:47:18
【问题描述】:
我在阅读函数式编程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可以安全地删除。这里没有意义。 -
这里似乎没什么用,但你应该指定 read_line 究竟做了什么,或者当迭代器耗尽时它会如何表现。
-
@dorvak:这是来自免费的 O'Reilly 电子书Functional programming in Python,David 没有分享该书中的实现。更糟糕的是,在不同的示例之间,它会从迭代器切换到类似
next()的函数,这是两种截然不同的实现。
标签: python exception-handling generator stopiteration