कुछ नेस्टेड छोरों से बाहर तोड़ करने के कई तरीकेइटरेटर के बाहर से पाश के लिए करने के लिए भेजा जा रहा है StopIteration
वे इस प्रकार हैं:
1) को तोड़ने के लिए जारी उपयोग करने के लिए
for x in xrange(10):
for y in xrange(10):
print x*y
if x*y > 50:
break
else:
continue # only executed if break was not used
break
2)
def foo():
for x in range(10):
for y in range(10):
print x*y
if x*y > 50:
return
foo()
3) विशेष अपवाद उपयोग करने के लिए वापसी का उपयोग करने के
class BreakIt(Exception): pass
try:
for x in range(10):
for y in range(10):
print x*y
if x*y > 50:
raise BreakIt
except BreakIt:
pass
मैंने कुछ सोचा था कि ऐसा करने का कोई और तरीका हो सकता है। यह बाहरी लूप पर सीधे भेजे गए स्टॉपइटरेशन अपवाद का उपयोग कर रहा है। मैं इस कोड
it = iter(range(10))
for i in it:
for j in range(10):
if i*j == 20:
raise StopIteration
दुर्भाग्य से, StopIteration किसी के लिए लूप द्वारा पकड़ा नहीं किया गया था लिखा था और है कि कोड एक बदसूरत Traceback का उत्पादन किया। मुझे लगता है कि ऐसा इसलिए है क्योंकि StopIteration को इटरेटर के अंदर से भेजा नहीं गया था। (यह मेरा अनुमान है, मुझे इसके बारे में निश्चित नहीं है)।
क्या कोई तरीका है कि मैं बाहरी लूप को स्टॉपइटरेशन भेज सकता हूं?
धन्यवाद!
कृपया, क्या आप समझा सकते हैं, soppable_iter कैसे काम करता है? मुझे लगता है कि अगर एक्स: ... – ovgolovin
यह वास्तव में चालाक है और मैंने प्रदान किए गए वर्ग संस्करण से बहुत छोटा है! – kindall
मुझे लगता है कि मुझे कोरआउट पर नजदीक दिखने की ज़रूरत है, क्योंकि इसके बारे में मेरे वर्तमान ज्ञान के साथ मैं समझ नहीं सकता कि स्टॉपपैबल_टर में एल्गोरिदम क्या करता है। – ovgolovin