Last modified: May 19, 2025 By Alexander Williams

Best Practices to Avoid ValueError in Python

ValueError is a common exception in Python. It occurs when a function receives an argument of the correct type but an inappropriate value. This article explains how to avoid it.

What is ValueError?

A ValueError happens when a function gets a value it cannot process. For example, converting a non-numeric string to an integer raises this error. Learn more about ValueError in Python.

Common Causes of ValueError

ValueError can occur for many reasons. Here are some common causes:

  • Invalid type conversion.
  • Incorrect number of values to unpack.
  • Out-of-range values.

Read about common causes of ValueError for more details.

Best Practices to Avoid ValueError

1. Validate Input Data

Always check if the input data is valid before processing it. Use try-except blocks to handle unexpected values.


def convert_to_int(value):
    try:
        return int(value)
    except ValueError:
        print("Invalid input. Please enter a number.")
        return None

result = convert_to_int("abc")


Invalid input. Please enter a number.

2. Use Default Values

Provide default values for cases where the input might be invalid. This prevents the program from crashing.


def safe_convert(value, default=0):
    try:
        return float(value)
    except ValueError:
        return default

print(safe_convert("123"))  # Output: 123.0
print(safe_convert("abc"))  # Output: 0

3. Check Data Range

Ensure the value falls within an acceptable range before using it. This avoids errors like negative numbers where positives are expected.


def calculate_square_root(value):
    if value < 0:
        raise ValueError("Value must be non-negative")
    return value ** 0.5

try:
    print(calculate_square_root(-4))
except ValueError as e:
    print(e)


Value must be non-negative

4. Handle Unpacking Errors

When unpacking values, ensure the number of variables matches the number of values. Learn how to fix unpacking errors.


data = [1, 2]
try:
    a, b, c = data
except ValueError as e:
    print(f"Error: {e}")


Error: not enough values to unpack (expected 3, got 2)

5. Use Type Checking

Verify the type of the input before processing it. This prevents invalid type conversions.


def add_numbers(a, b):
    if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
        raise ValueError("Both arguments must be numbers")
    return a + b

print(add_numbers(5, "abc"))


ValueError: Both arguments must be numbers

Conclusion

ValueError can be avoided by validating inputs, using default values, and checking data ranges. Proper error handling makes your code more robust. For more tips, read about handling ValueError exceptions.