शुरुआत से Pythonशुरुआतीपाठ 1057 मिनट का पाठ

बिना डरे एरर (errors) को पढ़ना

एरर मैसेज कोई सज़ा नहीं, बल्कि सुराग होते हैं। उन चार एरर के बारे में जानें जो आपको सबसे ज़्यादा देखने को मिलेंगी, और ट्रेसबैक (traceback) को नीचे से ऊपर की ओर पढ़ना सीखें।

पाठ वीडियो में

60 सेकंड में

बिना डरे एरर (errors) को पढ़ना

एरर मैसेज कोई सज़ा नहीं, बल्कि सुराग होते हैं। उन चार एरर के बारे में जानें जो आपको सबसे ज़्यादा देखने को मिलेंगी, और ट्रेसबैक (traceback) को नीचे से ऊपर की ओर पढ़ना सीखें।

1/5
आसान शब्दों में
जब कार की वॉर्निंग लाइट जलती है, तो एक अच्छा मैकेनिक घबराता नहीं है। वह देखता है कि कौन सी लाइट जली है और सही जगह पर जाँच करता है। पायथन के एरर मैसेज भी वॉर्निंग लाइट की तरह हैं। वे आपको बताते हैं कि किस तरह की समस्या है और किस लाइन को देखना है।
यह करें
हर प्रोग्रामर, चाहे वह नया हो या एक्सपर्ट, उसे हर दिन एरर मिलती हैं। उन्हें ठीक करना कोडिंग का एक सामान्य हिस्सा है, और हर एक को ठीक करने से आप बेहतर बनते जाते हैं। आप बिल्कुल सही दिशा में जा रहे हैं।

एरर कैसी दिखती है

जब पायथन आगे नहीं बढ़ पाता, तो वह रुक जाता है और एक traceback दिखाता है। यहाँ एक उदाहरण है (फ़ाइल का नाम आपके ब्राउज़र में थोड़ा अलग दिख सकता है):
What Python printstext
Traceback (most recent call last):
  File "main.py", line 5, in <module>
    print(report("Asha", 85))
  File "main.py", line 2, in report
    return "Marks for " + name + ": " + marks
TypeError: can only concatenate str (not "int") to str

इसे नीचे से ऊपर की ओर पढ़ें

  1. 1

    आखिरी लाइन: एरर का प्रकार और एक मैसेज

    TypeError: केवल टेक्स्ट (str) को टेक्स्ट से जोड़ा जा सकता है, नंबर (int) से नहीं।
  2. 2

    ठीक ऊपर: वह लाइन जहाँ गड़बड़ी हुई

    लाइन 2, report फ़ंक्शन के अंदर।
  3. 3

    और ऊपर: पायथन वहाँ कैसे पहुँचा

    लाइन 5 ने report() को कॉल किया, जिसने लाइन 2 को चलाया।
  4. 4

    अब लाइन को ठीक करें

    नंबर को टेक्स्ट में बदलें: str(marks), या f-string का इस्तेमाल करें।
सबसे निचली लाइन आपको बताती है कि क्या गलत हुआ। ठीक ऊपर की लाइनें बताती हैं कि कहाँ गलत हुआ। सबसे ऊपर का हिस्सा वह रास्ता दिखाता है जिससे पायथन वहाँ पहुँचा, जो तब मददगार होता है जब एरर किसी फ़ंक्शन के अंदर हो।

वे चार एरर जो आपको सबसे ज़्यादा मिलेंगी

एररइसका क्या मतलब हैआम वजहकैसे ठीक करें
SyntaxErrorपायथन कोड को बिल्कुल नहीं समझ पा रहा है, इसलिए कुछ भी रन नहीं होताकोई :, ब्रैकेट या कोट्स (quote mark) छूटनादिखाई गई लाइन और उसके ठीक पहले वाली लाइन को देखें
NameErrorआपने ऐसे नाम का इस्तेमाल किया जिसे पायथन नहीं जानतास्पेलिंग की गलती, गलत कैपिटल लेटर, या किसी वेरिएबल को बनाने से पहले इस्तेमाल करनास्पेलिंग जाँचें और देखें कि क्या उसे पहले बनाया गया था
TypeErrorआपने इस काम के लिए गलत टाइप की वैल्यू का इस्तेमाल कियाटेक्स्ट को नंबर में जोड़ना; किसी फ़ंक्शन को गलत संख्या में arguments देकर कॉल करनाint() या str() से बदलें, या कॉल को ठीक करें
IndexErrorआपने लिस्ट की ऐसी पोज़ीशन माँगी जो मौजूद ही नहीं हैlen(list) से पहले रुकने के बजाय वहीं तक गिनते जानायाद रखें आखिरी इंडेक्स len(list) - 1 होता है

SyntaxError: ग्रामर की जाँच

पायथन पूरे प्रोग्राम को चलाने से पहले उसकी ग्रामर जाँचता है। इसलिए SyntaxError होने पर कुछ भी प्रिंट नहीं होता, गलती के ऊपर वाली लाइनें भी नहीं। दो आम गलतियाँ:
Examples of SyntaxError messagestext
if marks > 35              <- missing colon
SyntaxError: expected ':'

print("Hello"              <- missing closing bracket
SyntaxError: '(' was never closed
कभी-कभी पायथन असली गलती के बाद वाली लाइन की ओर इशारा करता है, क्योंकि वह वहीं आकर उलझ जाता है। अगर दिखाई गई लाइन सही लगे, तो उसके ऊपर वाली लाइन जाँचें।

NameError और TypeError काम करते हुए

Python: catching errors to look at thempython
# try/except lets the program carry on after an error, so we can see each one.
try:
    total = 10
    print(totl)                 # typo
except NameError as e:
    print("NameError:", e)

try:
    print("Age: " + 13)         # text + number
except TypeError as e:
    print("TypeError:", e)

try:
    runs = [4, 6, 1]
    print(runs[3])              # only positions 0, 1, 2 exist
except IndexError as e:
    print("IndexError:", e)
आपको अभी try और except की ज़रूरत नहीं है। यहाँ इनका इस्तेमाल सिर्फ़ इसलिए किया गया है ताकि एक ही उदाहरण में तीन एरर दिखाई जा सकें। आम तौर पर आप बस एरर को आने देते हैं, उसे पढ़ते हैं, और कोड ठीक करते हैं।

एरर ठीक करने का एक शांत रूटीन

  1. आखिरी लाइन पढ़ें। यह किस प्रकार की एरर है?
  2. लाइन नंबर ढूँढें। उस लाइन को देखें, और उसके ऊपर वाली लाइन को भी।
  3. ज़ोर से बोलकर कहें कि वह लाइन क्या करने की कोशिश कर रही है, और हर वैल्यू क्या है।
  4. एक चीज़ बदलें। फिर से Run दबाएँ।
  5. नई एरर आई? बहुत बढ़िया: इसका मतलब है पहली वाली ठीक हो गई और पायथन आगे बढ़ गया।
नोट
वेरिएबल में क्या वैल्यू है यह देखने के लिए print() लाइनें जोड़ना डिबगिंग का एक असली तरीका है जिसे प्रोफेशनल्स भी इस्तेमाल करते हैं। उदाहरण के लिए print("marks is", marks, type(marks)) वैल्यू और उसका टाइप दोनों दिखाता है।
इसे आज़माएँ। ऊपर दिए गए एरर के उदाहरणों में हर गलती को ठीक करें ताकि कोई एरर न आए: total की स्पेलिंग सही करें, str(13) का इस्तेमाल करें, और runs[2] माँगें। हर बदलाव के बाद Run दबाएँ।

और देखें और पढ़ें

लैब

मार्क्स की एक बग वाली रिपोर्ट, जिसे हर ट्रेसबैक को पढ़कर एक-एक करके ठीक किया गया।

~15 min

समस्या

इस प्रोग्राम में तीन बग्स (bugs) हैं। इसका काम एक छात्र का औसत, उसके सबसे ज़्यादा मार्क्स और यह प्रिंट करना है कि वह कितने विषयों में पास हुआ।

  1. Run दबाएँ। ट्रेसबैक को नीचे से ऊपर की ओर पढ़ें। यह कौन सी एरर है, और किस लाइन पर है?
  2. सिर्फ़ उस एक चीज़ को ठीक करें और फिर से Run दबाएँ। नई एरर का मतलब है प्रगति!
  3. तब तक करते रहें जब तक कि तीनों लाइनें सही से प्रिंट न हो जाएँ: [78, 92, 65, 88] का औसत 80.75 है, सबसे ज़्यादा मार्क्स 92 हैं, और 4 विषयों में पास हुए हैं (पासिंग मार्क्स 35 हैं)।

फ़ंक्शन्स को डिलीट न करें और न ही उनका काम बदलें: उनके अंदर के बग्स को ठीक करें। फिर Check दबाएँ। 🎉

प्रैक्टिस लैब

कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।

आउटपुट

कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।

आपका काम तब पूरा होगा जब

कठिन सवाल

उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।

Q1TypeError पहली प्रिंट लाइन पर दिखाई दी, लेकिन असली गलती report के अंदर थी। ट्रेसबैक आपको दोनों जगहें कैसे दिखाता है?दिखाएं

ट्रेसबैक हर कदम को दिखाता है। नीचे के पास यह report के अंदर की वह लाइन दिखाता है जहाँ टेक्स्ट और नंबर को जोड़ा गया था; उसके ऊपर यह print(report(...)) वाली लाइन दिखाता है जिसने इसे कॉल किया था। नीचे से ऊपर पढ़ने पर आप सीधे उस लाइन पर पहुँच जाते हैं जिसे ठीक करना है, और ऊपर की लाइनें समझाती हैं कि पायथन वहाँ कैसे पहुँचा।

Q2जब तीन बग्स थे, तब आपको एक बार में केवल एक ही एरर क्यों दिखी?दिखाएं

पायथन रन होते समय जैसे ही पहली एरर पर पहुँचता है, वहीं रुक जाता है। IndexError और NameError उन लाइनों में हैं जो अभी रन ही नहीं हुई थीं। पहले वाले को ठीक करने के बाद ही पायथन इतना आगे बढ़ सका कि अगले बग तक पहुँच पाए। (SyntaxError अलग होती है: पायथन कुछ भी चलाने से पहले ही उसे ढूँढ लेता है।)

जारी रखने के लिए कृपया साइन इन करें।

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

पायथन 'most recent call last' क्यों कहता है?

यह कदमों को उसी क्रम में दिखाता है जिस क्रम में वे हुए, इसलिए सबसे नया कदम—जहाँ असल में एरर आई—सबसे नीचे होता है। इसीलिए नीचे से ऊपर पढ़ना इसे समझने का सबसे तेज़ तरीका है।

एरर ऐसी लाइन की ओर इशारा कर रही है जो सही लग रही है। अब क्या करें?

इसके ऊपर वाली लाइन जाँचें, खास तौर पर छूटे हुए ब्रैकेट या कोट्स के लिए। यह भी जाँचें कि उस लाइन पर इस्तेमाल की गई वैल्यूज़ वही हैं जो आप सोच रहे हैं, इसके लिए उस लाइन से ठीक पहले उन्हें प्रिंट करके देखें।

क्या मुझे एरर मैसेज को सर्च इंजन या चैटबॉट में कॉपी करना चाहिए?

यह मददगार हो सकता है, खासकर आखिरी लाइन। लेकिन पहले खुद पढ़ने की कोशिश करें; आप बहुत तेज़ी से सीखेंगे। अगर आप चैटबॉट से पूछते हैं, तो एरर और उसके आस-पास की कुछ लाइनें शेयर करें, और कोड इस्तेमाल करने से पहले समझ लें कि उसे कैसे ठीक किया गया है।

एरर में 'Did you mean' का क्या मतलब होता है?

जब आप स्पेलिंग में कोई गलती करते हैं, तो पायथन के नए वर्ज़न अक्सर उससे मिलता-जुलता नाम सुझाते हैं, उदाहरण के लिए NameError के अंत में ऐसा हिंट हो सकता है: Did you mean: 'total'?। यह आमतौर पर सही होता है, इसलिए इसे पढ़ना फायदेमंद है।

पाठ का टेस्ट

5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।

टेस्ट देने और अपनी प्रोग्रेस सेव करने के लिए साइन इन करें