AD

Python Code में बार-बार आने वाले 4 सामान्य Errors: कारण और उन्हें ठीक करने की Debugging Guide

Python Code में बार-बार आने वाले 4 सामान्य Errors: कारण और उन्हें ठीक करने की Debugging Guide

प्रोग्रामिंग सीखते समय कोड में एरर आना बिल्कुल स्वाभाविक है। दुनिया का कोई भी डेवलपर ऐसा नहीं है जिसका कोड पहली बार में बिना किसी बग के चल जाए। Python अपनी आसान सिंटैक्स के लिए जानी जाती है, लेकिन जब स्क्रीन पर लाल रंग का लंबा Traceback Error दिखाई देता है, तो अक्सर शुरुआती कोडिंग स्टूडेंट्स भ्रमित हो जाते हैं।

एरर से डरने के बजाय उसे पढ़ना और ठीक करना (Debugging) एक बेहतरीन प्रोग्रामर बनने का सबसे महत्वपूर्ण हिस्सा है। इस प्रैक्टिकल गाइड में हम Python में आने वाली 4 सबसे आम समस्याओं, उनके असली कारणों और कोड उदाहरणों के साथ उन्हें ठीक करने के स्टेप-बाय-स्टेप तरीकों को समझेंगे।

1. TypeError: can only concatenate str (not 'int') to str

यह एरर तब आती है जब आप दो अलग-अलग डेटा टाइप्स (जैसे String और Integer) को आपस में जोड़ने या ऑपरेट करने की कोशिश करते हैं।

यह समस्या क्यों आती है?

Python एक Strongly Typed भाषा है। यह अपने आप डेटा टाइप्स को जबरन नहीं बदलती। अगर आप किसी टेक्स्ट (String) के साथ सीधे किसी संख्या (Integer) को + ऑपरेटर से जोड़ते हैं, तो Python यह तय नहीं कर पाती कि उसे गणितीय जोड़ करना है या टेक्स्ट मिलाना है।

गलत कोड का उदाहरण:

age = 22
message = "मेरी उम्र " + age + " वर्ष है।"
print(message)

आउटपुट: TypeError: can only concatenate str (not "int") to str

इसे ठीक करने का सही तरीका:

इस समस्या को हल करने के दो सबसे आसान तरीके हैं:

  • तरीका A: Type Casting (str() फंक्शन का उपयोग): वेरिएबल को पहले स्ट्रिंग में बदलें।
age = 22
message = "मेरी उम्र " + str(age) + " वर्ष है।"
print(message)
  • तरीका B: F-Strings का इस्तेमाल (बेस्ट प्रैक्टिस): Python 3.6+ में f-strings सबसे साफ और आधुनिक तरीका है।
age = 22
message = f"मेरी उम्र {age} वर्ष है।"
print(message)

2. IndexError: list index out of range

यह एरर तब दिखाई देती है जब आप किसी लिस्ट (List) या टपल (Tuple) से ऐसे इंडेक्स की वैल्यू मांगते हैं, जो उस लिस्ट में मौजूद ही नहीं है।

यह समस्या क्यों आती है?

Python में इंडेक्सिंग हमेशा 0 से शुरू होती है। इसका मतलब है कि अगर आपकी लिस्ट में 3 एलिमेंट्स हैं, तो उनके इंडेक्स 0, 1 और 2 होंगे। अगर आप इंडेक्स 3 या उससे बड़ा इंडेक्स एक्सेस करने की कोशिश करेंगे, तो Python क्रैश हो जाएगी।

गलत कोड का उदाहरण:

fruits = ["Apple", "Mango", "Banana"]
# इस लिस्ट में कुल 3 फल हैं (इंडेक्स 0, 1, 2)
print(fruits[3])

आउटपुट: IndexError: list index out of range

इसे ठीक करने के स्टेप्स:

  • स्टेप 1: लिस्ट की लंबाई (len) जांचें: इंडेक्स कॉल करने से पहले हमेशा चेक करें कि लिस्ट का साइज कितना है।
fruits = ["Apple", "Mango", "Banana"]
index_to_access = 3

if index_to_access < len(fruits):
    print(fruits[index_to_access])
else:
    print(f"एरर: इंडेक्स {index_to_access} लिस्ट के साइज से बड़ा है।")
  • स्टेप 2: Negative Indexing का सही उपयोग: यदि आपको लिस्ट का आखिरी आइटम चाहिए, तो बड़े नंबर का अनुमान लगाने के बजाय -1 का उपयोग करें: print(fruits[-1])

3. KeyError: Dictionary में गैर-मौजूद Key को कॉल करना

Python Dictionary (Key-Value पेयर) पर काम करते समय डेवलपर्स को अक्सर KeyError का सामना करना पड़ता है।

यह समस्या क्यों आती है?

जब आप डिक्शनरी से किसी ऐसी 'Key' की वैल्यू निकालने की कोशिश करते हैं जो डिक्शनरी में मौजूद ही नहीं है, तब पायथन सीधे प्रोग्राम को रोक देती है।

गलत कोड का उदाहरण:

user_profile = {
    "name": "Rahul",
    "role": "Developer"
}

# 'email' नाम की की डिक्शनरी में नहीं है
print(user_profile["email"])

आउटपुट: KeyError: 'email'

इसे ठीक करने के सुरक्षित तरीके:

  • तरीका 1: .get() मेथड का इस्तेमाल (Safe Extraction): ब्रैकट्स [] के बजाय get() मेथड का उपयोग करें। अगर की नहीं होगी, तो यह एरर देने के बजाय None या डिफॉल्ट वैल्यू लौटाएगा।
user_profile = {
    "name": "Rahul",
    "role": "Developer"
}

# क्रैश होने से बचाएगा और डिफॉल्ट मैसेज देगा
email = user_profile.get("email", "ईमेल उपलब्ध नहीं है")
print(email)
  • तरीका 2: in ऑपरेटर से पहले जांचना:
if "email" in user_profile:
    print(user_profile["email"])
else:
    print("ईमेल की नहीं मिली!")

4. IndentationError: unexpected indent या unindent does not match

C, C++ या Java जैसी भाषाओं में कोड ब्लॉक को परिभाषित करने के लिए कर्ली ब्रेसेस {} का उपयोग किया जाता है, लेकिन Python केवल Indentation (स्पेसिंग) पर निर्भर करती है।

यह समस्या क्यों आती है?

यह एरर आमतौर पर दो वजहों से आती है:

  1. किसी फंक्शन, लूप या इफ-कंडीशन के अंदर स्पेस देना भूल जाना या गलत जगह अतिरिक्त स्पेस दे देना।
  2. एक ही फाइल में कहीं Tab और कहीं Spaces का मिला-जुला इस्तेमाल करना।

गलत कोड का उदाहरण:

def welcome():
print("नमस्ते, कोडिंग की दुनिया में स्वागत है!") # इंडेंटेशन गायब है

welcome()

आउटपुट: IndentationError: expected an indented block after function definition

इसे ठीक करने के उपाय:

  • मानक नियम अपनाएं: हमेशा हर कोड ब्लॉक के लिए ठीक 4 Spaces का उपयोग करें।
  • VS Code सेटिंग्स सही करें: अपने कोड एडिटर में "Insert Spaces" और "Render Whitespace" का विकल्प ऑन रखें ताकि आपको स्पेस और टैब का अंतर साफ दिखाई दे।
def welcome():
    # 4 स्पेसेस के साथ सही इंडेंटेशन
    print("नमस्ते, कोडिंग की दुनिया में स्वागत है!")

welcome()

Python Debugging को आसान बनाने के 3 जरूरी टिप्स

कोड में बग आने पर घबराने के बजाय इन 3 आदतों को अपनी रूटीन में शामिल करें:

  • Traceback को नीचे से ऊपर पढ़ें: Python एरर मैसेज में सबसे निचली लाइन आपको बताती है कि असल समस्या क्या है, और उसके ठीक ऊपर वाली लाइन फाइल का नाम और लाइन नंबर दर्शाती है।
  • Try-Except (Exception Handling) का उपयोग करें: जिन कोड लाइन्स में क्रैश का जोखिम हो (जैसे यूजर इनपुट या नेटवर्क रिक्वेस्ट), उन्हें हमेशा try...except ब्लॉक में रखें।
  • Print Statements या Debugger का सहारा लें: अगर लूप या कैलकुलेशन में गलत परिणाम आ रहे हैं, तो बीच-बीच में print(type(var), var) का इस्तेमाल करके डेटा का प्रकार और वैल्यू चेक करें।

अक्सर पूछे जाने वाले सवाल (FAQs)

Q1. क्या Python में वार्निंग (Warning) और एरर (Error) एक ही चीज़ हैं?

नहीं। एरर आने पर प्रोग्राम तुरंत रुक (क्रैश) जाता है, जबकि वार्निंग सिर्फ एक चेतावनी होती है (जैसे कोई पुराना फीचर इस्तेमाल करने पर) और प्रोग्राम चलना जारी रहता है।

Q2. NameError: name 'x' is not defined का क्या मतलब है?

इसका मतलब है कि आपने किसी ऐसे वेरिएबल या फंक्शन को कॉल कर लिया है जिसे पहले बनाया ही नहीं गया, या फिर उसके नाम की स्पेलिंग (Case-sensitivity) में गलती है।

Q3. क्या Python कोड को ऑटोमैटिक फॉर्मेट करने का कोई टूल है?

हाँ, आप Black, Autopep8 या Ruff जैसे कोड फॉर्मैटर्स का उपयोग कर सकते हैं। ये टूल्स सेव करते ही इंडेंटेशन और सिंटैक्स स्पेसिंग को अपने आप ठीक कर देते हैं।

Post a Comment

0 Comments