खोज…


वाक्य - विन्यास

  • उत्तीर्ण करना

टिप्पणियों

आप कभी भी दुभाषिया को स्पष्ट रूप से कुछ नहीं करने के लिए क्यों कहना चाहेंगे? अजगर वाक्य आवश्यकता है कि कोड ब्लॉक (के बाद है if , except , def , class आदि) नहीं खाली हो सकता है।

लेकिन कभी-कभी एक खाली कोड ब्लॉक अपने आप में उपयोगी होता है। एक खाली class ब्लॉक एक नए, अलग वर्ग को परिभाषित कर सकता है, जैसे कि अपवाद जिसे पकड़ा जा सकता है। ब्लॉक को except एक खाली तरीका "बाद में माफी मांगने" को व्यक्त करने का सबसे सरल तरीका हो सकता है, अगर माफी के लिए पूछने के लिए कुछ भी नहीं था। यदि एक पुनरावृत्ति करने वाला सभी भारी उठाने का काम करता है, तो लूप को चलाने के for रिक्त स्थान उपयोगी हो सकता है।

इसलिए, यदि कोड ब्लॉक में कुछ भी नहीं होना चाहिए, तो इस तरह के ब्लॉक के लिए IndentationError उत्पादन नहीं करने के लिए एक pass की आवश्यकता होती है। वैकल्पिक रूप से, किसी भी कथन (केवल एक शब्द का मूल्यांकन किया जाना चाहिए, जैसे Ellipsis शाब्दिक ... या एक स्ट्रिंग, सबसे अधिक बार एक डॉकस्ट्रिंग) का उपयोग किया जा सकता है, लेकिन pass स्पष्ट करता है कि वास्तव में कुछ भी नहीं होना चाहिए, और इसकी आवश्यकता नहीं है वास्तव में मूल्यांकन किया जाना है और (कम से कम अस्थायी रूप से) मेमोरी में संग्रहीत किया जाता है। यहाँ pass के सबसे लगातार उपयोग का एक छोटा सा एनोटेट संग्रह है जो मेरे रास्ते को पार कर गया है - साथ में अच्छे और बुरे पर कुछ टिप्पणियों के साथ।

  • एक निश्चित प्रकार के Exception (सभी या) को अनदेखा करना (उदाहरण xml ):

     try:
         self.version = "Expat %d.%d.%d" % expat.version_info
     except AttributeError:
         pass # unknown
    

    नोट:, उठाता के सभी प्रकार की उपेक्षा से निम्न उदाहरण में pandas , आम तौर पर, बुरा व्यवहार माना जाता है, क्योंकि यह भी अपवाद है कि शायद फोन करने वाले को पारित किया जाना चाहिए पकड़ता है, जैसे KeyboardInterrupt या SystemExit (या यहां तक HardwareIsOnFireError - कैसे क्या तुम जानते हो आप विशिष्ट त्रुटियों के साथ एक कस्टम बॉक्स पर नहीं चल रहे हैं, जिसे कुछ कॉलिंग एप्लिकेशन के बारे में जानना चाहते हैं?)।

     try:
         os.unlink(filename_larry)
     except:
         pass
    

    कम से कम except Error: उपयोग करने के बजाय except Error: या इस मामले में अधिमानतः except OSError: बेहतर अभ्यास माना जाता है। मेरे द्वारा स्थापित किए गए सभी अजगर मॉड्यूल का एक त्वरित विश्लेषण ने मुझे दिया है कि सभी except ...: pass 10% से अधिक except ...: pass स्टेटमेंट सभी अपवादों को पकड़ते हैं, इसलिए यह अभी भी पायथन प्रोग्रामिंग में एक लगातार पैटर्न है।

  • एक अपवाद वर्ग प्राप्त करना जो नए व्यवहार को नहीं जोड़ता है (उदाहरण के लिए scipy ):

     class CompileError(Exception):
         pass
    

    इसी प्रकार, सार आधार वर्ग के रूप में अभिप्रेत वर्गों में अक्सर एक स्पष्ट खाली __init__ या अन्य विधियाँ होती हैं जो उपवर्गों को प्राप्त करने के लिए होती हैं। (उदाहरण pebl )

     class _BaseSubmittingController(_BaseController):
         def submit(self, tasks): pass
         def retrieve(self, deferred_results): pass
    
  • परिणामों के बारे में परवाह किए बिना कुछ परीक्षण मूल्यों के लिए कोड का परीक्षण ठीक से चलता है ( mpmath ):

     for x, error in MDNewton(mp, f, (1,-2), verbose=0,
                              norm=lambda x: norm(x, inf)):
         pass
    
  • क्लास या फंक्शन परिभाषाओं में, अक्सर एक डॉकस्ट्रिंग पहले से ही अनिवार्य स्टेटमेंट के रूप में पहले से ही ब्लॉक में किया जाता है। ऐसे मामलों में, ब्लॉक में pebl अतिरिक्त pass हो सकता है यह कहने के लिए कि "यह वास्तव में कुछ भी नहीं करने का इरादा है।", उदाहरण के लिए pebl :

     class ParsingError(Exception): 
         """Error encountered while parsing an ill-formed datafile."""
         pass
    
  • कुछ मामलों में, pass का उपयोग प्लेसहोल्डर के रूप में यह कहने के लिए किया जाता है कि "यह विधि / वर्ग / अगर-ब्लॉक / ... अभी तक लागू नहीं हुई है, लेकिन यह ऐसा करने का स्थान होगा", हालांकि मैं व्यक्तिगत रूप से Ellipsis शाब्दिक पसंद करता हूं ... (नोट: अजगर -3 केवल) सख्ती से इस और पिछले उदाहरण में जानबूझकर "नहीं सेशन" के बीच अंतर करने के लिए। उदाहरण के लिए, यदि मैं एक मॉडल को व्यापक स्ट्रोक में लिखता हूं, तो मैं लिख सकता हूं

     def update_agent(agent):
         ... 
    

    दूसरों के पास कहां हो सकता है

     def update_agent(agent):
         pass
    

    इससे पहले

     def time_step(agents):
         for agent in agents:
             update_agent(agent)
    

    बाद के बिंदु पर update_agent फ़ंक्शन को भरने के लिए एक अनुस्मारक के रूप में, लेकिन यह देखने के लिए कि पहले से ही बाकी कोड व्यवहार करता है या नहीं, कुछ परीक्षण चलाएं। (इस मामले के लिए एक तीसरा विकल्प raise NotImplementedError । यह विशेष रूप से दो मामलों के लिए उपयोगी है: या तो "इस सार पद्धति को हर उपवर्ग द्वारा लागू किया जाना चाहिए, इस बेस क्लास में इसे परिभाषित करने का कोई सामान्य तरीका नहीं है" , या "यह फ़ंक्शन , इस नाम के साथ, इस रिलीज़ में अभी तक लागू नहीं किया गया है, लेकिन यह वही है जो इसके हस्ताक्षर जैसा लगेगा " )

एक अपवाद पर ध्यान न दें

try:
    metadata = metadata['properties']
except KeyError:
    pass

एक नया अपवाद बनाएं जिसे पकड़ा जा सके

class CompileError(Exception):
    pass


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow