ValueError in Python: Causes and Fixes

ValueError is a common Python error for beginners.

It means a function received a value of the correct type, but the actual content of that value is not valid for the operation.

For example, int() can convert strings to integers. But if the string does not contain a valid whole number, Python raises ValueError.

Quick fix

text = "abc"

try:
    number = int(text)
except ValueError:
    print("Input must be a valid number")

Use try-except when a value might have the right type but the wrong content, such as converting non-numeric text with int().

What ValueError means

A ValueError happens when:

  • Python gets the kind of object it expects
  • But the value inside that object is not acceptable

Example:

int("hello")

This raises ValueError because:

  • "hello" is a string
  • int() accepts strings
  • But "hello" is not a valid integer

This is different from TypeError.

  • ValueError: right type, wrong value
  • TypeError: wrong type for the operation

If you are specifically seeing an int() conversion error, see ValueError: invalid literal for int() with base 10.

Common places beginners see ValueError

Beginners often run into ValueError in these situations:

  • Converting text to numbers with int() or float()
  • Unpacking the wrong number of values
  • Using string methods with invalid input
  • Searching for missing items with methods like str.index() or tuple.index()
  • Passing invalid values to math-related functions

Common examples include:

  • Trying to convert non-numeric text with int()
  • Trying to convert badly formatted text with float()
  • Unpacking too many or too few values
  • Using index() for a value that is not present
  • Passing invalid values to library functions

Example that causes ValueError

Here are two short examples.

Example 1: int("abc")

text = "abc"
number = int(text)
print(number)

Output:

ValueError: invalid literal for int() with base 10: 'abc'

Why this fails:

  • text is a string
  • int() accepts strings
  • But "abc" is not a valid integer

Example 2: float("12,5")

text = "12,5"
number = float(text)
print(number)

Output:

ValueError: could not convert string to float: '12,5'

Why this fails:

  • Python expects decimal numbers like "12.5"
  • "12,5" uses a comma instead of a dot

If this is your exact problem, see ValueError: could not convert string to float.

How to fix ValueError

There is no single fix for every ValueError. The correct fix depends on the value that caused the problem.

Common ways to fix it:

  • Check the actual value before passing it to a function
  • Clean user input with strip() before conversion
  • Validate data before unpacking or parsing
  • Use try-except when bad input is possible
  • Read the full error message carefully

Clean input before converting

text = " 42 \n"
number = int(text.strip())
print(number)

Output:

42

strip() removes extra spaces and newline characters from the start and end of the string.

Validate before unpacking

data = "Alice,25"

parts = data.split(",")

if len(parts) == 2:
    name, age = parts
    print(name)
    print(age)
else:
    print("Input must contain exactly two values")

This helps prevent unpacking errors when the number of values is wrong.

If you need more help with conversion, see how to convert a string to int in Python or how to convert a string to float in Python.

Step-by-step debugging checklist

When you get a ValueError, use this checklist:

  1. Find the exact line named in the traceback
  2. Print the value that caused the error
  3. Check what type(value) returns
  4. Check whether the value format matches what the function expects
  5. Add validation or exception handling if needed

Useful debugging commands:

print(value)
print(type(value))
print(repr(value))
help(int)
help(float)

Why repr() is useful

print(value) shows the value in a normal way.

print(repr(value)) shows hidden characters too, such as spaces or \n.

Example:

value = "42\n"

print(value)
print(repr(value))

Possible output:

42

'42\n'

This helps you notice formatting problems that may be causing the error.

ValueError vs TypeError

The difference is simple:

  • ValueError: the type is acceptable, but the value is not
  • TypeError: the type itself is wrong

Example:

print(int("123"))   # works

# ValueError: string is allowed, but the content is invalid
# int("abc")

# TypeError: None is not a valid type here
# int(None)

Another way to think about it:

  • "abc" is still a string, and int() accepts strings, so this becomes ValueError
  • None is not a string, number, or compatible value for int() in this context, so this becomes TypeError

For a full comparison, see TypeError vs ValueError in Python explained.

When to use try-except

Use try-except when invalid values are possible and normal in your program.

Good examples:

  • User input
  • File content
  • Data from APIs
  • Data from external sources

Example:

text = input("Enter a whole number: ")

try:
    number = int(text)
    print("You entered:", number)
except ValueError:
    print("That is not a valid whole number")

This is useful because users may enter unexpected text.

Do not hide the error silently.

Bad example:

text = "abc"

try:
    number = int(text)
except ValueError:
    pass

This makes debugging harder because the program fails quietly.

Instead, show a helpful message or ask for new input.

If you want to learn the pattern in more detail, see how to handle exceptions in Python.

FAQ

What is the difference between ValueError and TypeError?

ValueError means the type is accepted but the value is invalid. TypeError means the type itself is wrong for that operation.

Can I prevent ValueError before it happens?

Yes. Validate or clean the value first, or use try-except when invalid input is possible.

Why does int() raise ValueError?

Because the text you passed does not represent a valid integer.

Should I always use try-except for ValueError?

Not always. If you can validate the value first, that is often clearer. Use try-except when failure is expected or input is unpredictable.

See also