Home › Hindi › IndexError: list index out of range

Python IndexError: list index out of range — Hindi में solution

🌐 यह page Hindi में है · Read this in English →

Exact message: list index out of range4 कारण + fixOff-by-one का पक्का इलाज

सबसे ज़रूरी बात: Python 0 से गिनता है

IndexError: list index out of range का मतलब सिर्फ इतना है — आपने list से ऐसी position माँगी जो उसमें है ही नहीं।

fruits = ["aam", "kela", "seb"]
#  index:     0       1       2      (−3, −2, −1 पीछे से)
print(fruits[3])   # ❌ IndexError: list index out of range

3 items हैं, पर valid indexes हैं 0, 1 और 2। यही "off-by-one" वाली galti है — दुनिया 1 से गिनती है, Python 0 से।

सुनहरा rule: n items वाली list का आखिरी valid index हमेशा n − 1 होता है। आखिरी item चाहिए तो index गिनने के बजाय fruits[-1] लिखो — यह हमेशा सही रहता है।

कारण 1 — Loop एक कदम ज़्यादा चल गया

nums = [10, 20, 30]
for i in range(len(nums) + 1):   # ❌ +1 ने 4 rounds चला दिए
    print(nums[i])               # i = 3 पर crash

for i in range(len(nums)):       # ✅ 0, 1, 2
    print(nums[i])

for n in nums:                   # ✅✅ सबसे Pythonic — index की ज़रूरत ही नहीं
    print(n)

range(len(nums)) पहले से ही सही rounds देता है — उसमें +1 कभी मत जोड़ो। और अगर index का काम नहीं है तो सीधे items पर loop चलाओ; index चाहिए तो enumerate() use करो:

for i, naam in enumerate(nums):
    print(i, naam)

कारण 2 — List खाली है (सबसे खतरनाक case)

यह bug testing में नहीं पकड़ा जाता क्योंकि आपकी test list में हमेशा data होता है — असली user के पास खाली list आती है और app crash हो जाता है।

results = []
print(results[0])      # ❌ IndexError — खाली list में index 0 भी नहीं होता

if results:            # ✅ पहले check करो
    print(results[0])
else:
    print("Koi result nahi mila")

Filter करने के बाद हमेशा यह check लगाओ: pass_students = [s for s in students if s >= 40] — हो सकता है कोई pass ही न हुआ हो।

कारण 3 — split() ने उतने हिस्से नहीं बनाए जितने आप मान रहे थे

line = "Rahul"
parts = line.split(",")     # ['Rahul'] — comma था ही नहीं!
print(parts[1])             # ❌ IndexError

parts = line.split(",")
if len(parts) > 1:          # ✅ भरोसा मत करो, नाप लो
    print(parts[1])

File/CSV पढ़ते वक्त यह सबसे common crash है — खाली lines और अधूरी rows हमेशा मिलती हैं। len(parts) check करना आदत बना लो।

कारण 4 — Nested list में गलत level का index

grid = [[1, 2], [3, 4]]
print(grid[2][0])    # ❌ बाहर वाली list में सिर्फ 2 rows हैं (0 और 1)
print(grid[1][2])    # ❌ row 1 में सिर्फ 2 columns हैं (0 और 1)
print(grid[1][1])    # ✅ 4

Nested list में दो अलग गिनतियाँ चलती हैं — पहला bracket row, दूसरा column। crash से पहले print(len(grid), len(grid[0])) लगाकर दोनों नाप लो।

Bonus: slicing कभी IndexError नहीं देती

यह Python की बहुत काम की बात है — [a:b] slicing range के बाहर जाने पर crash नहीं करती, बस जितना मिलता है उतना दे देती है।

nums = [1, 2, 3]
print(nums[10])      # ❌ IndexError
print(nums[1:10])    # ✅ [2, 3] — कोई error नहीं
print(nums[10:20])   # ✅ [] — खाली list

इसलिए "पहले 5 items" जैसा काम nums[:5] से करो — चाहे list में 2 ही items हों, code नहीं टूटेगा।

IndexError vs KeyError — confuse मत हो

IndexError list, tuple और string जैसी position वाली चीज़ों में आता है। KeyError dictionary में आता है, जहाँ position नहीं बल्कि नाम (key) से चीज़ निकलती है। दोनों का मतलब एक ही है — "जो माँगा वह है नहीं" — पर देखने की जगह अलग है: index के लिए len() देखो, key के लिए .keys()।

🛠️ Practice करो (free, browser में)

पढ़ना काफी नहीं — यही bug खुद fix करके देखो। नीचे के problems browser में ही चलते हैं, कोई install नहीं, कोई login नहीं।

सारे free problems देखो →

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

list index out of range का मतलब क्या है?

इसका मतलब है कि आपने list से ऐसी position माँगी है जो मौजूद नहीं है। Python 0 से गिनता है, इसलिए 3 items वाली list के valid indexes 0, 1 और 2 हैं — index 3 माँगने पर IndexError आता है।

IndexError कैसे fix करें?

crash वाली line से पहले print(len(my_list)) लगाकर देखें कि list में कितने items हैं। loop में range(len(list)) इस्तेमाल करें (+1 कभी नहीं), खाली list के लिए if my_list: check लगाएँ, और आखिरी item के लिए my_list[-1] लिखें।

खाली list पर IndexError कैसे रोकें?

index लगाने से पहले if my_list: से check कर लें, या slicing इस्तेमाल करें — my_list[:1] खाली list पर भी crash नहीं करती, बस [] लौटा देती है।

string पर भी IndexError आ सकता है?

हाँ। string भी characters की sequence है, इसलिए "Rahul"[10] पर IndexError: string index out of range आएगा। वही rule लागू है — आखिरी valid index len(text) − 1 है।

आगे पढ़ो