2

関数型プログラミング 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)
4

2 に答える 2

3

そこに留まる理由はないと思いますtry...except。たとえば、リレイズは同じトレースバックを運ぶため、ジェネレーターの動作はそこで変更されません。

言い換えれば、そこには意味がなく、おそらくリファクタリングの残りのアーティファクトです。

冗長な最初の行を削除して、ループをさらに単純化できます。

def get_log_lines(log_file): 
    while True:
        line = read_line(log_file) 
        if complex_condition(line):
            yield line
于 2015-09-18T09:08:25.857 に答える