What does ValueError: could not convert string to float mean?

Updated October 2026 · How we answer

Short answerIt means Python tried to turn a string into a floating-point number, but the string wasn't a valid number (e.g., contained letters or symbols).

What causes this error

This ValueError occurs when you call float() on a string that doesn't represent a number. For example, float('abc') or float('12a') will raise it. Python expects the string to contain only digits, an optional sign, a decimal point, and possibly an exponent like '1e3'.

Common triggers include reading user input, parsing data from a file or API, or handling form values that are empty or contain commas, currency symbols, or spaces. Even a trailing newline from a file can cause it if you don't strip whitespace.

How to fix it

First, check what the string actually contains. Print it or log it to see if it's empty, has extra characters, or uses a different decimal separator. Then decide how to handle invalid input: you can validate before converting, catch the exception, or clean the string.

If the string is user-supplied, use a try/except block to catch the ValueError and show a friendly message. If the string comes from a file, strip whitespace and remove non-numeric characters like commas or dollar signs before converting. For empty strings, provide a default value.

  • Use try/except ValueError to handle bad input gracefully.
  • Strip whitespace with .strip() before converting.
  • Remove commas, currency symbols, or other non-numeric characters.
  • Check for empty strings and provide a fallback (e.g., 0.0).
  • Consider using a validation function or a library like pandas for bulk conversion.

Examples

If you have data like '1,234.56', float() will fail because of the comma. You can remove commas first: float('1,234.56'.replace(',', '')). If the string is ' 3.14 ', strip it: float(' 3.14 '.strip()). If it's 'N/A', you might skip it or use a default.

In a loop over lines from a file, always strip newlines: for line in file: value = float(line.strip()). If some lines are headers or comments, skip them before conversion.

Common mistakes

  • Assuming the string is always a valid number without checking user input or file data.
  • Forgetting to strip whitespace or remove thousands separators before converting.
  • Catching the exception but not handling it, leading to silent failures or incorrect defaults.
From our shopsCASEONYX: Dark-luxe tough phone cases.