मैं हाल ही में कुछ आश्चर्यजनक व्यवहार भर में अजगर जनरेटर में आया:अजगर जनरेटर, 'coroutine' में गैर निगलने अपवाद
class YieldOne:
def __iter__(self):
try:
yield 1
except:
print '*Excepted Successfully*'
# raise
for i in YieldOne():
raise Exception('test exception')
कौन सा उत्पादन देता है:
*Excepted Successfully*
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
Exception: test exception
मैं (सुखद) था हैरान कि *Excepted Successfully*
मुद्रित हो गया, जैसा कि मैं चाहता था, लेकिन यह भी हैरान हुआ कि अपवाद अभी भी शीर्ष स्तर तक फैल गया है। मुझे मनाया गया व्यवहार प्राप्त करने के लिए raise
कीवर्ड का उपयोग करने की उम्मीद थी (इस उदाहरण में टिप्पणी की गई)।
क्या कोई यह समझा सकता है कि यह कार्यक्षमता क्यों काम करती है, और जेनरेटर में except
अपवाद को क्यों निगलता है?
क्या यह पाइथन में एकमात्र उदाहरण है जहां except
कोई अपवाद निगलता नहीं है?
आह, अब यह समझ में आता है। मैं मूल रूप से जनरेटर को 'ओवर' को बढ़ावा देने के अपवाद की अपेक्षा नहीं करता था। – EoghanM
+1 बहुत दिलचस्प है! 'Generator.throw' चाल को प्रकाशित करने के लिए – rubik
+1! – EoghanM