Python Language
पास का बयान
खोज…
वाक्य - विन्यास
- उत्तीर्ण करना
टिप्पणियों
आप कभी भी दुभाषिया को स्पष्ट रूप से कुछ नहीं करने के लिए क्यों कहना चाहेंगे? अजगर वाक्य आवश्यकता है कि कोड ब्लॉक (के बाद है 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