बिना डरे एरर (errors) को पढ़ना
एरर मैसेज कोई सज़ा नहीं, बल्कि सुराग होते हैं। उन चार एरर के बारे में जानें जो आपको सबसे ज़्यादा देखने को मिलेंगी, और ट्रेसबैक (traceback) को नीचे से ऊपर की ओर पढ़ना सीखें।
60 सेकंड में
बिना डरे एरर (errors) को पढ़ना
एरर मैसेज कोई सज़ा नहीं, बल्कि सुराग होते हैं। उन चार एरर के बारे में जानें जो आपको सबसे ज़्यादा देखने को मिलेंगी, और ट्रेसबैक (traceback) को नीचे से ऊपर की ओर पढ़ना सीखें।
एरर कैसी दिखती है
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
आखिरी लाइन: एरर का प्रकार और एक मैसेज
TypeError: केवल टेक्स्ट (str) को टेक्स्ट से जोड़ा जा सकता है, नंबर (int) से नहीं। - 2
ठीक ऊपर: वह लाइन जहाँ गड़बड़ी हुई
लाइन 2, report फ़ंक्शन के अंदर। - 3
और ऊपर: पायथन वहाँ कैसे पहुँचा
लाइन 5 ने report() को कॉल किया, जिसने लाइन 2 को चलाया। - 4
अब लाइन को ठीक करें
नंबर को टेक्स्ट में बदलें: str(marks), या f-string का इस्तेमाल करें।
वे चार एरर जो आपको सबसे ज़्यादा मिलेंगी
| एरर | इसका क्या मतलब है | आम वजह | कैसे ठीक करें |
|---|---|---|---|
SyntaxError | पायथन कोड को बिल्कुल नहीं समझ पा रहा है, इसलिए कुछ भी रन नहीं होता | कोई :, ब्रैकेट या कोट्स (quote mark) छूटना | दिखाई गई लाइन और उसके ठीक पहले वाली लाइन को देखें |
NameError | आपने ऐसे नाम का इस्तेमाल किया जिसे पायथन नहीं जानता | स्पेलिंग की गलती, गलत कैपिटल लेटर, या किसी वेरिएबल को बनाने से पहले इस्तेमाल करना | स्पेलिंग जाँचें और देखें कि क्या उसे पहले बनाया गया था |
TypeError | आपने इस काम के लिए गलत टाइप की वैल्यू का इस्तेमाल किया | टेक्स्ट को नंबर में जोड़ना; किसी फ़ंक्शन को गलत संख्या में arguments देकर कॉल करना | int() या str() से बदलें, या कॉल को ठीक करें |
IndexError | आपने लिस्ट की ऐसी पोज़ीशन माँगी जो मौजूद ही नहीं है | len(list) से पहले रुकने के बजाय वहीं तक गिनते जाना | याद रखें आखिरी इंडेक्स len(list) - 1 होता है |
SyntaxError: ग्रामर की जाँच
if marks > 35 <- missing colon
SyntaxError: expected ':'
print("Hello" <- missing closing bracket
SyntaxError: '(' was never closedNameError और TypeError काम करते हुए
# 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 की ज़रूरत नहीं है। यहाँ इनका इस्तेमाल सिर्फ़ इसलिए किया गया है ताकि एक ही उदाहरण में तीन एरर दिखाई जा सकें। आम तौर पर आप बस एरर को आने देते हैं, उसे पढ़ते हैं, और कोड ठीक करते हैं।एरर ठीक करने का एक शांत रूटीन
- आखिरी लाइन पढ़ें। यह किस प्रकार की एरर है?
- लाइन नंबर ढूँढें। उस लाइन को देखें, और उसके ऊपर वाली लाइन को भी।
- ज़ोर से बोलकर कहें कि वह लाइन क्या करने की कोशिश कर रही है, और हर वैल्यू क्या है।
- एक चीज़ बदलें। फिर से Run दबाएँ।
- नई एरर आई? बहुत बढ़िया: इसका मतलब है पहली वाली ठीक हो गई और पायथन आगे बढ़ गया।
print() लाइनें जोड़ना डिबगिंग का एक असली तरीका है जिसे प्रोफेशनल्स भी इस्तेमाल करते हैं। उदाहरण के लिए print("marks is", marks, type(marks)) वैल्यू और उसका टाइप दोनों दिखाता है।total की स्पेलिंग सही करें, str(13) का इस्तेमाल करें, और runs[2] माँगें। हर बदलाव के बाद Run दबाएँ।और देखें और पढ़ें
लैब
मार्क्स की एक बग वाली रिपोर्ट, जिसे हर ट्रेसबैक को पढ़कर एक-एक करके ठीक किया गया।
समस्या
इस प्रोग्राम में तीन बग्स (bugs) हैं। इसका काम एक छात्र का औसत, उसके सबसे ज़्यादा मार्क्स और यह प्रिंट करना है कि वह कितने विषयों में पास हुआ।
- Run दबाएँ। ट्रेसबैक को नीचे से ऊपर की ओर पढ़ें। यह कौन सी एरर है, और किस लाइन पर है?
- सिर्फ़ उस एक चीज़ को ठीक करें और फिर से Run दबाएँ। नई एरर का मतलब है प्रगति!
- तब तक करते रहें जब तक कि तीनों लाइनें सही से प्रिंट न हो जाएँ:
[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%)।