ですが、私はこれらのパーサーを持っているとしましょう:変更歩留まりのからの戻り値
parsers = {
".foo": parse_foo,
".bar", parse_bar
}
parse_foo
とparse_bar
は行ずつをもたらす両方の発電機です。私は、単一のディスパッチ関数を作成したい場合は、私はこれだろう。
def parse(ext):
yield from parsers[ext]()
を構文からの収量は、発電機を上下に簡単にトンネル情報に私を可能にします。
降伏結果を変更している間にトンネリングを維持する方法はありますか?
トンネリングを壊しながら、そうは簡単です:
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'と' throw'を通過する間に、 'map'が何をし' passthrough_map'を実装することだと思いますあなたはマッピングしています。 IIRCは、その権利を行うことは難しいですが、一度正しく取得する必要があるだけで、その機能が必要なときはいつでも再利用できます。 – user2357112