यहां कुछ सबसे आम पायथन प्रोग्रामिंग गलतियां/गॉचास हैं जो प्रोग्रामर करते हैं:
स्कोप नाम लुकअप: पायथन LEGB (स्थानीय, संलग्न, वैश्विक, अंतर्निर्मित) के क्रम में स्कोपिंग नियमों का पालन करता है। चूंकि पायथन में कोई सख्त प्रकार बाध्यकारी नहीं है, प्रोग्रामर बाहरी स्कोप वैरिएबल को किसी अन्य मान से दोबारा जोड़ सकते हैं जिसे बाद में बाहरी दायरे में उपयोग किया जा सकता है लेकिन अब इसे किसी अन्य मान से बदल दिया गया है।
is और =के बीच अंतर नहीं करना: पायथन में एक ऑपरेटर है, यह जांचता है कि क्या दोनों ऑब्जेक्ट एक ही मेमोरी एड्रेस को संदर्भित करते हैं। ==ऑपरेटर __eq__ फ़ंक्शन निष्पादित करता है जो अलग-अलग वर्गों के लिए अलग-अलग समानता की जांच कर सकता है।
इस पर पुनरावृति करते हुए किसी सूची को संशोधित करना:यदि आप किसी सूची पर पुनरावृति करते हुए तत्वों को हटाते हैं, तो आपको एक IndexError मिलेगा। यह सूची के आकार में कमी के कारण है जबकि आप इसके साथ सूचकांक को कम नहीं कर रहे हैं।
क्लोजर बाइंडिंग - निम्नलिखित कोड पर विचार करें -
उदाहरण
listLambdas = [lambda x : i + x for i in range(5)] for lam in listLambdas: print(lam(10))
आउटपुट
यह आउटपुट देगा -
14 14 14 14 14
हैरान? यह क्लोजर में बाध्यकारी के कारण है। इस सूची के सभी लैम्ब्डा वेरिएबल i को संदर्भित करते हैं, अर्थात, जब यह बदलता है, तो ये लैम्ब्डा नए मान को संदर्भित करना शुरू करते हैं।
नाम बिल्ट-इन के साथ संघर्ष: आपने किसी समय योग नामक एक चर बनाया होगा। ध्यान दें कि आपने इस मामले में योग फ़ंक्शन के संदर्भ को पुन:असाइन किया है। यह इस तरह की चीजों के लिए तुच्छ लगता है लेकिन कुछ गंभीर मुद्दों का कारण बन सकता है जब पैकेजों का नाम इस तरह से रखा जाता है। इससे मानक वाले के बजाय आपकी कक्षाओं को आयात करने वाले अन्य पैकेज हो सकते हैं।
ऑपरेटरों के लिए सहज ज्ञान युक्त कार्यान्वयन: पायथन कक्षाओं के लिए ऑपरेटर कार्यों को अधिभारित करने का एक तरीका प्रदान करता है। अक्सर, लोग इन ऑपरेटरों को असामान्य तरीके से लागू करते हैं और अंत में जटिल और सहज ज्ञान युक्त एपीआई बनाते हैं।