Home › Hindi › Traceback कैसे पढ़ें
Python traceback कैसे पढ़ें — Hindi में step-by-step
🌐 यह page Hindi में है · Read this in English →
नीचे से ऊपर पढ़ोCall stack का मतलब5-step debugging routine
Traceback दुश्मन नहीं, नक्शा है
लाल रंग का बड़ा सा error देखकर ज़्यादातर beginners डर जाते हैं और सीधा Google पर copy-paste कर देते हैं। पर traceback असल में Python की तरफ से दिया गया पूरा नक्शा है: क्या हुआ, कहाँ हुआ, और किन-किन रास्तों से होते हुए वहाँ पहुँचा। इसे पढ़ना आ गया तो debugging की आधी लड़ाई जीत ली।
Traceback (most recent call last):
File "report.py", line 14, in <module>
show_average(students)
File "report.py", line 9, in show_average
avg = calculate(s["marks"])
File "report.py", line 5, in calculate
return sum(marks) / len(marks)
ZeroDivisionError: division by zero
Step 1 — सबसे आखिरी line पढ़ो
ZeroDivisionError: division by zero — यह बताता है क्या हुआ। Colon से पहले error का type है (ZeroDivisionError), बाद में उसका मतलब (division by zero)। इसी एक line में 60% जवाब होता है।
पहली line — "most recent call last" — का मतलब है: सबसे नई (और सबसे काम की) जानकारी सबसे नीचे है। इसलिए traceback हमेशा नीचे से ऊपर पढ़ो।
Step 2 — सबसे नीचे वाला File...line पढ़ो
आखिरी error line से ठीक ऊपर वाला block बताता है कहाँ फटा: File "report.py", line 5, in calculate, और उसके नीचे वही code line छपी होती है जो crash हुई। बस इन्हीं दो चीज़ों से काम शुरू करो — line 5, function calculate।
Step 3 — ऊपर की तरफ चलो: यह call stack है
बाकी blocks बताते हैं कि program यहाँ तक कैसे पहुँचा — ऊपर से नीचे: line 14 ने show_average() बुलाया, उसने line 9 पर calculate() बुलाया, और वहाँ line 5 पर crash हुआ।
यह chain इसलिए ज़रूरी है क्योंकि असली galti अक्सर crash वाली line में नहीं होती। ऊपर के उदाहरण में calculate() बिल्कुल सही लिखा है — galti यह है कि किसी student की marks list खाली थी और caller ने बिना check किए भेज दी। Fix line 9 पर होगा, line 5 पर नहीं।
Step 4 — अपनी files ढूँढो, library की नहीं
Django, pandas या requests जैसी library use करते वक्त traceback 30 lines लंबा हो जाता है। ज़्यादातर lines site-packages के अंदर की होती हैं। Rule: सबसे नीचे वाली वह line ढूँढो जो आपकी अपनी file की है — bug लगभग हमेशा वहीं होता है, library के अंदर नहीं।
Step 5 — print() से सच जानो
Crash वाली line मिल गई? अब उससे ठीक ऊपर values छाप कर देखो — 90% bugs यहीं पकड़े जाते हैं:
def calculate(marks):
print("DEBUG marks =", marks, type(marks), len(marks))
return sum(marks) / len(marks)
और ज़्यादा जानकारी चाहिए तो Python 3.8+ का shortcut बहुत काम का है — f"{marks=}" नाम और value दोनों छाप देता है:
print(f"{marks=} {len(marks)=}") # marks=[] len(marks)=0
असली debugger चाहिए तो एक line काफी है — program वहीं रुक जाएगा और आप हर variable देख पाओगे:
breakpoint() # Python 3.7+ ; n = next, p x = print x, c = continue
"During handling of the above exception..." का मतलब
कभी-कभी दो tracebacks एक साथ दिखते हैं। बीच में लिखा होता है:
- During handling of the above exception, another exception occurred — पहला error handle करते वक्त except वाले block में खुद एक नया error आ गया। नीचे वाला traceback असली crash है, पर ऊपर वाला मूल कारण बताता है।
- The above exception was the direct cause of... — किसी ने जान-बूझकर
raise NewError from oldलिखा है, यानी दोनों जुड़े हुए हैं।
दोनों हालात में: दोनों tracebacks पढ़ो, पर fix ज़्यादातर सबसे ऊपर वाले (मूल) error का करना होता है।
🛠️ Practice करो (free, browser में)
पढ़ना काफी नहीं — यही bug खुद fix करके देखो। नीचे के problems browser में ही चलते हैं, कोई install नहीं, कोई login नहीं।
- try/except/else का flow — output predict करो
अक्सर पूछे जाने वाले सवाल
Python traceback को किस तरफ से पढ़ना चाहिए?
नीचे से ऊपर। सबसे आखिरी line error का type और message बताती है, उससे ऊपर वाला block बताता है कि crash किस file और line पर हुआ, और बाकी ऊपर के blocks बताते हैं कि program वहाँ तक कैसे पहुँचा।
most recent call last का मतलब क्या है?
इसका मतलब है कि सबसे हाल का function call सूची में सबसे नीचे लिखा है — यानी सबसे काम की जानकारी नीचे मिलेगी, इसलिए पढ़ना नीचे से शुरू करें।
लंबे traceback में अपनी galti कैसे ढूँढें?
ऐसी सबसे नीचे वाली line ढूँढें जो आपकी अपनी file की हो (site-packages वाली नहीं)। bug लगभग हमेशा आपके code में होता है, library के अंदर नहीं।
traceback में line number सही होने पर भी galti न दिखे तो?
crash वाली line से ऊपर print(f"{variable=}") लगाकर values देखें, और call stack में एक step ऊपर जाएँ — अक्सर गलत value भेजने वाला caller ही असली bug होता है।