अध्याय ४ · खण्ड III · 26 मिनेट
डिबग: त्रुटि पढ्ने र राम्रा प्रश्न सोध्ने
तपाईंले लेख्ने झन्डै हरेक कार्यक्रम चल्नुअघि बिग्रिन्छ। डिबगिङको सीप उपचार कण्ठ गर्ने होइन — सन्देशलाई ध्यानले पढ्ने, यसको कुरा पत्याउने, र एक्लै हल गर्न नसक्दा सही प्रश्न सोध्ने हो।
अनुभवी इन्जिनियरहरूले सुरुआतीहरूलाई भनिराख्ने तर आफूले बिर्सिने एउटा स्वीकारोक्ति: प्रोग्रामिङको अधिकांश डिबगिङ हो। तपाईं कोड लेख्नुहुनेछ। यो बिग्रिनेछ। तपाईं सुधार्नुहुनेछ। तपाईं अरू कोड लेख्नुहुनेछ। यो फरक तरिकाले बिग्रिनेछ। तपाईं फेरि सुधार्नुहुनेछ। यो कामको आकार बिमारी होइन — यो काम नै हो। पाँच मिनेटमा फेरि काममा फर्किने निर्माता र दुई घण्टा अल्झने निर्माताबीचको फरक भनेको तिनले त्रुटि कसरी पढ्छन् हो। त्यही यो खण्डले सिकाउँछ।
Python ट्रेसब्याकको शरीर रचना
Python त्रुटि सन्देश — जसलाई ट्रेसब्याक भनिन्छ — पहिलो हेराइमा देखिनेभन्दा बढी संरचना भएको हुन्छ। साधारण उदाहरण:
Traceback (most recent call last):
File "/Users/nischal/nepse-alerts/run.py", line 12, in <module>
total = total_by_vendor(transactions, "Khalti")
File "/Users/nischal/nepse-alerts/run.py", line 6, in total_by_vendor
running = running + t["amont"]
KeyError: 'amont'
तलबाट माथि पढ्नुहोस्:
- अन्तिम लाइन —
KeyError: 'amont'— त्रुटि प्रकार र एक-लाइन कारण नाम दिन्छ। यो लगभग सधैं उत्तर हुने ठाउँ हो। - माथिका लाइन — हरेक
File ... line ...— कल स्ट्याक हो: त्रुटिमा पुर्याउने फङ्क्सन कलहरूको बाटो, तलको गहिरो कलदेखि सिरको बाहिरी सम्म। - सबैभन्दा पहिलो लाइन (“most recent call last”) कसरी स्ट्याक पढ्ने भन्ने सङ्केत हो: सबैभन्दा गहिरो कल — जुन वास्तवमा बिग्रिएको हो — तल्लो हो। सिरका फ्रेमहरू Python त्यहाँ कसरी पुग्यो भन्ने मात्र हुन्।
उदाहरणमा, KeyError: 'amont' को अर्थ शब्दकोशसँग 'amont' की सोधियो र थिएन भन्ने हो। ठ्याक्कै माथिको लाइन हेर्नुहोस्: t["amont"]। टाइपो। "amount" हुनुपर्थ्यो। लाइन 6 मा सुधार्नुहोस् र कार्यक्रम चल्छ।
अधिकांश डिबगिङ यस्तै देखिन्छ। टाइपो, गलत प्रकार, छुटेको आयात, अफ-बाई-वान — र सन्देशले कुन हो भन्छ।
सामान्य त्रुटिहरूको छोटो परिचय
Course 01 मा तपाईंले प्रायः भेट्ने त्रुटि:
SyntaxError — Python ले लाइन पार्स गर्नै सकेन। सामान्यतया def / if / for को अन्तमा कोलोन छुटेको, बन्द नभएको उद्धरण, बन्द नभएको कोष्ठक। लाइन नम्बर कहिलेकाहीं वास्तविक समस्याको पछिको लाइनमा हुन्छ (किनभने Python ले बिग्रिएको निर्माणको अन्त्यसम्म पढेर मात्र गुनासो गर्छ), त्यसैले माथि पनि हेर्नुहोस्।
IndentationError — तपाईंले ट्याब र स्पेस मिसाउनुभयो, वा इन्डेन्ट असंगत छ। सम्पादकलाई चार स्पेस प्रयोग गर्न र ट्यापलाई स्पेसमा रूपान्तरण गर्न सेट गर्नुहोस्; त्रुटि गायब हुन्छ।
NameError: name 'X' is not defined — Python ले कहिल्यै नदेखेको नाम प्रयोग गर्नुभयो। सामान्य कारण: टाइपो (Print बनाम print), import बिर्सनुभयो, असाइन गर्नुअघि भेरिएबल प्रयोग गर्नुभयो।
TypeError: ... — गलत प्रकारको मान प्रयोग गर्नुभयो। '2105.4' + 100 क्यानोनिकल केस हो — स्ट्रिङ र पूर्णाङ्क। सन्देश पढ्नुहोस्; सामान्यतया दुई प्रकार नाम दिन्छ।
KeyError: 'x' — शब्दकोशसँग नभएको की सोधियो। झन्डै सधैं टाइपो वा स्रोत डाटामा छुटेको की।
IndexError: list index out of range — सूचीको अन्त्यभन्दा पर सूचकाङ्क लगाउनुभयो। तीन-वस्तुको सूचीमा expenses[5]। len(...) जाँच्नुहोस्।
AttributeError: 'X' object has no attribute 'Y' — .something() लाई something विधि नभएको कुरामा कल गर्नुभयो। कहिलेकाहीं टाइपो (.uppe() को सट्टा .upper()), कहिलेकाहीं भेरिएबल तपाईंले सोचेको होइन — type(...) प्रिन्ट गरेर वास्तवमा के राख्छ पढ्नुहोस्।
FileNotFoundError — Python ले खोजेको ठाउँमा फाइल छैन। बाटो जाँच्नुहोस्, अनि Python कुन फोल्डरबाट चलिरहेको छ हेर्नुहोस् (नोटबुकमा, import os; print(os.getcwd()))।
ImportError / ModuleNotFoundError — import गर्न खोजेको पुस्तकालय यो वातावरणमा स्थापित छैन। सही भर्चुअल वातावरण सक्रिय गरेर pip install ... गर्नुहोस्, वा सक्रिय गर्नुभयो कि भएन जाँच्नुहोस्।
यदि यिनै नौवटा देख्नासाथ नाम भन्न सक्नुहुन्छ भने, तपाईं आत्मविश्वासी Python पाठक बन्ने बाटोमा धेरै हदसम्म पुगिसक्नुभयो।
जब सन्देश पर्याप्त छैन: print डिबगिङ
कहिलेकाहीं त्रुटि सन्देशले लाइन देखाउँछ, लाइन ठीकै देखिन्छ, र वरिपरिको कोड पनि ठीकै देखिन्छ, र के भइरहेको छ थाहा हुन्न। संसारको सबैभन्दा पुरानो डिबगिङ प्रविधि अझै काम गर्छ:
print("transactions:", transactions[:3])
print("type:", type(transactions))
print("first row:", transactions[0])
print ले कार्यक्रमको कुनै पनि बिन्दुमा “यो कुरा मैले सोचेकै हो?” सोध्न दिन्छ। शङ्कास्पद लाइन वरिपरि केही print खसाल्नुहोस् र फेरि चलाउनुहोस्। तपाईंले प्रायः सूची सोचेको ठाउँमा None पाउनुहुनेछ, सङ्ख्या सोचेको ठाउँमा स्ट्रिङ, वा तीन पङ्क्ति सोचेको ठाउँमा खाली।
नोटबुकमा यो झन् अन्तरक्रियात्मक रूपमा गर्न सकिन्छ: बिग्रिएको फङ्क्सनलाई सेलमा बाँड्नुहोस्, हरेक लाइन छुट्टै चलाउनुहोस्, प्रत्येक चरणले के उत्पादन गर्छ निरीक्षण गर्नुहोस्। नोटबुकहरू डिजाइनमै डिबगिङ वातावरण हुन्।
अड्किँदा राम्रो प्रश्न सोध्ने
कहिलेकाहीं त्रुटि साँच्चै गाह्रो हुन्छ, र मद्दत चाहिन्छ। सहकर्मीलाई, फोरमलाई, वा Claude वा ChatGPT जस्तो भाषा मोडेललाई सोधे पनि, तपाईंले सोध्ने प्रश्नले उत्तरलाई आकार दिन्छ। नराम्रो प्रश्न:
“मेरो कोड चलिरहेको छैन। के गलत छ?”
राम्रो प्रश्नका तीन भाग हुन्छन्:
- तपाईं के गर्न खोज्दै हुनुहुन्थ्यो — एक वाक्यमा। “म NEPSE मूल्यको CSV पढ्दैछु र औसत बन्द निकाल्दैछु।”
- कोड आफै — समस्या देखाउन सक्ने सबैभन्दा सानो संस्करण। आवश्यक नभएको सबै हटाउनुहोस्। तपाईंको वास्तविक कार्यक्रम 200 लाइनको छ भने, तपाईंको प्रश्नमा 200 लाइन हुनुहुँदैन।
- सटीक त्रुटि सन्देश — टाँस्नुहोस्, आफ्नो शब्दमा होइन। त्रुटि सन्देश जानकारी हो; नफाल्नुहोस्।
यो ढाँचाले उपयोगी उत्तर पाउने प्रश्न बन्छ। उहीँ ढाँचा Stack Overflow मा, पाटनको साथीमा, र AI सहायकमा काम गर्छ।
म NEPSE मूल्यको CSV पढ्दैछु र औसत बन्द निकाल्दैछु।
मसँग छ:
import pandas as pd
prices = pd.read_csv("data/prices.csv")
print(prices["close"].mean() + 100)
यसले फ्याँक्छ:
TypeError: can only concatenate str (not "int") to str
CSV मा "date,close" हेडर पङ्क्ति र "2026-06-23,2105.4" जस्ता पङ्क्ति छन्।
म के गलत गर्दैछु?
त्यस्तो आकारको प्रश्नले एक-लाइन उत्तर पाउँछ। “मेरो कोड चलिरहेको छैन” आकारको प्रश्नले या त मौनता वा नमिल्ने ट्युटोरियल पाउँछ।
AI लाई कहिले र कसरी सोध्ने
आधुनिक AI सहायकहरू डिबगिङमा असामान्य रूपमा राम्रा छन् — कुनै पनि जीवित मानिसले पढेभन्दा बढी त्रुटि सन्देश पढिसकेका छन्। उपयोगी कार्यप्रवाह:
- पहिले आफै अन्तिम लाइन पढ्नुहोस्। स्पष्ट छ भने, सोध्न नबस्नुहोस्; सुधार्दा छिटो सिक्नुहुनेछ।
- दुई मिनेटपछि अड्किनुभयो भने, माथिको तीन-भाग प्रश्न ढाँचा प्रयोग गरेर त्रुटि र सम्बन्धित कोडलाई Claude, ChatGPT, वा रोजेको सहायकमा टाँस्नुहोस्।
- उत्तर ध्यानले पढेर हातले लागू गर्नुहोस्, अन्धाधुन्ध कपी-पेस्ट नगरी। उत्तर परीक्षण गर्ने परिकल्पना हो, सत्य होइन।
- काम नगरे, नयाँ त्रुटि टाँस्नुहोस् र के प्रयास गर्नुभयो व्याख्या गर्नुहोस्। AI सहायक एक-शटभन्दा कुराकानी राम्रोसँग गर्छन्।
जोखिम सिक्नुपर्ने कुरामा AI मा निर्भर बन्नु हो। उपचार पहिलो चरण हो — सधैं सन्देश पहिले पढ्नुहोस्, आफूलाई उचित मौका दिनुहोस्, अनि बढाउनुहोस्।
आफ्नो बुझाइ जाँच्नुहोस्
Quick check
—तपाईंले यो ट्रेसब्याक देख्नुहुन्छ: Traceback (most recent call last): File 'run.py', line 14, in <module> print(prices['Open'][0]) KeyError: 'Open' यसको सबैभन्दा सम्भावित अर्थ के हो?
Quick check
—एक जुनियर इन्जिनियरले तपाईंलाई पिङ गर्छिन्: 'मेरो कोड चल्दैन, सहयोग गर्नुहोस्'। यो खण्डका आधारमा, सबैभन्दा उपयोगी तत्काल प्रतिक्रिया के हो?
अब के आउँछ
तीन बानी मिलाएर — सफा कोठा, संस्करण नियन्त्रण, शान्तिले त्रुटि पढ्ने — तपाईं Course 01 को सबैभन्दा रोमाञ्चक भागका लागि तयार हुनुहुन्छ: वास्तविक रूपमा मोडेल बोलाउने। अध्याय 5 मा तपाईंले भाषा मोडेललाई पहिलो API कल गर्नुहुनेछ, केही सय टोकनको पाठ फिर्ता आउँदा देख्नुहुनेछ, र “एआईमाथि निर्माण गर्ने” को व्यवहारमा वास्तविक अर्थ बुझ्न थाल्नुहुनेछ। हामी अब उभिने काँध धेरै अग्ला छन्।