Home › Hindi › ValueError Hindi में

Python ValueError Hindi में — "invalid literal for int()" का fix

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

Exact message: invalid literal for int() with base 10Type सही, value गलतtry/except का सही pattern

TypeError से फर्क समझ लो

TypeError = type गलत था। ValueError = type तो सही था, पर value काम की नहीं थी।

int([1, 2])     # ❌ TypeError — list int() को दी ही नहीं जा सकती
int("abc")      # ❌ ValueError — string देना allowed है, पर "abc" number नहीं बनता

यानी ValueError का मतलब है: "function को जो चीज़ चाहिए थी वही मिली, बस उसका content गलत है।"

कारण 1 — User input में number नहीं आया

umar = int(input("Umar batao: "))   # user ने लिखा: pachees
ValueError: invalid literal for int() with base 10: 'pachees'

"base 10" का मतलब सिर्फ normal दशमलव गिनती है — कोई डरने वाली बात नहीं। और quotes के अंदर वही text छपता है जिसने crash कराया, तो debugging आसान है।

int() क्या-क्या मानता है: आगे-पीछे के spaces (int(" 42 ") = 42 ✅), +/− sign, और digits। बस। ये सब fail होंगे:

int("")         # ❌ खाली string (user ने सिर्फ Enter दबाया)
int("12.5")     # ❌ decimal point — पहले float() करो
int("1,000")    # ❌ comma
int("42rs")     # ❌ साथ में letters
int(float("12.5"))   # ✅ 12 (decimal कट जाएगा)

Solution — conversion को try/except में लपेटो

text = input("Umar batao: ")
try:
    umar = int(text)
except ValueError:
    print("Sirf number likho bhai!")
    umar = 0

बार-बार पूछना हो तो loop के साथ:

while True:
    text = input("Umar batao: ")
    try:
        umar = int(text)
        break
    except ValueError:
        print("Galat input, dobara try karo")

Rule: try के अंदर सिर्फ वही line रखो जो fail हो सकती है। पूरा program लपेटोगे तो असली bugs भी "handle" होकर छुप जाएँगे।

कारण 2 — Unpacking में values कम या ज़्यादा

a, b = [1, 2, 3]     # ❌ ValueError: too many values to unpack (expected 2)
a, b, c = [1, 2]     # ❌ ValueError: not enough values to unpack (expected 3, got 2)

name, marks = "Priya,95".split(",")    # ✅ ठीक-ठीक 2 हिस्से
a, *rest = [1, 2, 3]                   # ✅ a=1, rest=[2, 3]

CSV lines पर यह रोज़ होता है — किसी row में extra comma आ गया और unpacking टूट गई। *rest या पहले len(parts) check करना safe रहता है।

कारण 3 — remove() और index() में जो चीज़ है ही नहीं

nums = [1, 2, 3]
nums.remove(9)     # ❌ ValueError: list.remove(x): x not in list
nums.index(9)      # ❌ ValueError: 9 is not in list

if 9 in nums:      # ✅ पहले पूछो, फिर हटाओ
    nums.remove(9)

math.sqrt(-1) भी ValueError देता है — फिर वही बात: value ऐसी है जिस पर operation का मतलब नहीं बनता।

Production वाला साफ pattern

Input parsing को एक छोटे function में रखो — फिर पूरे program में safe conversion मिल जाता है और try/except बार-बार नहीं लिखना पड़ता।

def to_int(text, default=None):
    try:
        return int(str(text).strip())
    except (ValueError, TypeError):
        return default

print(to_int(" 42 "))      # 42
print(to_int("pachees"))   # None
print(to_int("", 0))       # 0

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

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

सारे free problems देखो →

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

invalid literal for int() with base 10 का मतलब क्या है?

इसका मतलब है कि आपने int() को ऐसी string दी जिसमें सिर्फ digits नहीं हैं — जैसे "abc", "12.5", "1,000" या खाली string। "base 10" सिर्फ normal दशमलव गिनती को कहते हैं।

ValueError और TypeError में क्या फर्क है?

TypeError तब आता है जब value का type ही गलत हो (जैसे int() को list देना), और ValueError तब जब type सही हो पर उसका content काम का न हो (जैसे int("abc"))।

int("12.5") क्यों fail होता है?

int() सिर्फ पूरे numbers की strings पढ़ता है, decimal point नहीं। पहले float("12.5") करें और फिर चाहें तो int(float("12.5")) से 12 पाएँ।

user input पर ValueError कैसे रोकें?

सिर्फ conversion वाली line को try/except ValueError में लपेटें और गलत input पर दोबारा पूछें। पूरे program को try में लपेटना गलत तरीका है क्योंकि इससे दूसरे bugs छुप जाते हैं।

आगे पढ़ो