चलो कहते हैं कि मैं इन पारसर्स करते हैं:से संशोधित करना उपज द्वारा दिया गया मान
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()
के लिए ऐसा करता है। यह बदसूरत, गन्दा और बग प्रवण है।
मुझे लगता है कि आपका सर्वश्रेष्ठ दांव शायद एक 'passthrough_map' करता है जनरेटर के माध्यम से map' जबकि' गुजर send' और 'throw' क्या' करता है लागू करने के लिए किया जाएगा आप मैपिंग कर रहे हैं आईआईआरसी, यह सही करना मुश्किल है, लेकिन आपको केवल इसे एक बार सही करने की आवश्यकता है, और फिर जब भी आपको उस कार्यक्षमता की आवश्यकता होती है तो आप इसका पुन: उपयोग कर सकते हैं। – user2357112