これらのパーサーがあるとしましょう:
parsers = {
".foo": parse_foo,
".bar", parse_bar
}
parse_foo
とparse_bar
はどちらも行を 1 つずつ生成するジェネレータです。単一のディスパッチ関数を作成する場合は、次のようにします。
def parse(ext):
yield from parsers[ext]()
yield from 構文を使用すると、情報をジェネレーターの上下に簡単にトンネリングできます。
歩留まりの結果を変更しながらトンネリングを維持する方法はありますか?
トンネリングを中断しながらこれを行うのは簡単です。
def parse(ext):
for result in parsers[ext]():
# Add the extension to the result
result.ext = ext
yield result
しかし、この方法ではパーサーまで使用でき.send()
ません。.throw()
私が考えている唯一の方法は、 のように醜いことtry: ... except Exception: ...
をして例外を渡すことです.send()
。それは醜く、乱雑で、バグが発生しやすいです。