Diciamo che ho questi parser:Modifica resa dal valore di ritorno di
parsers = {
".foo": parse_foo,
".bar", parse_bar
}
parse_foo
e parse_bar
sono entrambi i generatori che producono file uno a uno. Se voglio creare una singola funzione spedizione, farei questo:
def parse(ext):
yield from parsers[ext]()
La resa dalla sintassi mi permette di informazioni sul tunnel facilmente su e giù per i generatori.
C'è un modo per mantenere il tunneling mentre si modificano i risultati di rendimento?
In questo modo, mentre la rottura del tunnel è facile:
def parse(ext):
for result in parsers[ext]():
# Add the extension to the result
result.ext = ext
yield result
Ma in questo modo non posso usare .send()
o .throw()
fino al parser.
L'unico modo che sto pensando è di fare qualcosa di brutto come try: ... except Exception: ...
e passare le eccezioni, mentre si fa lo stesso per .send()
. È brutto, disordinato e incline agli insetti.
penso che la soluzione migliore sarebbe probabilmente per implementare un 'passthrough_map' che fa quello' map' fa passando '' send' e throw' attraverso al generatore stai mappando. IIRC, farlo correttamente è complicato, ma devi solo farlo bene una volta, e poi puoi riutilizzarlo ogni volta che ti serve quella funzionalità. – user2357112