मैं एक csv फ़ाइल से अधिक से अधिक 20 लाइनों को पढ़ने के लिए करना चाहते हैं:पायथन: StopIteration अपवाद और सूची comprehensions
rows = [csvreader.next() for i in range(20)]
ठीक काम करता है अगर फाइल 20 या अधिक पंक्तियां हैं, एक StopIteration अपवाद अन्यथा के साथ विफल रहता है।
क्या एक इटेटरेटर से निपटने का एक शानदार तरीका है जो सूची समझ में स्टॉपइटरेशन अपवाद फेंक सकता है या क्या मुझे नियमित रूप से लूप का उपयोग करना चाहिए?
धन्यवाद अयमान। ऐसा लगता है कि स्टॉपइटरेशन से निपटने के लिए सूची समझ को अद्यतन करने की आवश्यकता है, नहीं? ऐसा लगता है कि "इसके लिए" पहले से ही इसे अद्यतन करने के लिए अद्यतन किया गया है (यह अपवाद का सामना करते समय इसे फिर से रोकता है, इसे स्पष्ट रूप से पकड़ता है), और मुझे सूची समझों के लिए एक स्पष्ट कारण नहीं दिख रहा है। – Parand
स्टॉपइटरेशन को इसके पुनरुत्थान के सापेक्ष पकड़ने के लिए, अपने सूट में ऐसी अन्य वस्तुओं के लिए नहीं पकड़ता है। उदाहरण c = आईटीईआर (रेंज (5)) रेंज (10) में मैं के लिए के लिए: \t प्रिंट मैं, c.next() ग StopIteration अपवाद रिश्तेदार को बढ़ा देंगे। – Mapio
लूप के लिए ए निश्चित रूप से रोकथाम को पकड़ नहीं लेता है। यह केवल इसे पकड़ता है अगर इसे इटरेटर की अगली विधि द्वारा फेंक दिया जाता है, न कि अगर यह लूप बॉडी में फेंक दिया जाता है। आपके प्रश्न में, csvreader.next() लूप बॉडी के समान है। – Miles