Resolving Python’s ValueError: Cannot Convert String to Float

Error Handling Confusing Cannot Convert String To Float

ValueErrors are a type of exception in Python. They are classified as runtime errors because they are not identifiable during the writing of a program, by the debugger, or by the syntax highlighters in IDEs.

One common example of a ValueError is attempting to divide a number by zero. As there is no syntactical error in writing this statement, the interpreter will abruptly halt when it tries to execute the code, as it’s logically impossible to divide anything by zero.

Another instance of a ValueError occurs when you attempt to convert a string into an integer or a float using constructors. Since it’s impractical to convert a string or any other data type other than an integer into a float type, the Python interpreter raises an exception. This error is demonstrated below:

ValueError                                Traceback (most recent call last)
<ipython-input-1-3038d8149efd> in <cell line: 2>()
ValueError: could not convert string to float: 'string input'

Simulating the ValueError: The String to Float Conversion Challenge

The error, cannot convert string to float can be raised when the interpreter is confused by how to convert a string into a float as per the code demands.

The most common cause of this error is user input. When taking user input, the user might be confused on what type of value they should feed into the computer. Or, incase the programmer didn’t mention the data type of the input before prompting the user, the interpreter might read it as a string by default.

There was one major difference in user input between Python 2 and python3. In Python 2, the statement raw_input() was used to fetch input from the user in the default format. For example, if the user put an integer input, then the interpreter will read it as an integer. Only if the given input was put inside quotations would then the interpreter consider it a string.

Whereas in Python 3, this method was changed. Raw_input() became only input(). Nowadays, if only the input() statement is used, the default format of any type of user input, be it numbers or words would be considered strings. Instead we can used the float(), int() constructors to limit the user input to a specific types.

When the above constructors are used and the program requires a float input but gets a string, it will raise the value error.

In the given program below, we are trying to divide a decimal number(float not integers) by 10. The required float number will change according to the user input. We have used the float() constructor to limit the type of input and also to convert the given user input into float. We will provide a string input and see how the value error pops up.

Value Error Cannot Convert String To Float
Value Error Cannot Convert String To Float

Related: Handling ValueError in Python: Detecting Strings and Integers.

Tackling ValueError in Python: The Try-Except Strategy

Handling value errors in python is the same as handling other exceptions in Python 3. We can use a try and except block to handle them. A try and except statement is the most common way to error handling in this programming language.

Let’s look at how to use a try and except block to handle this value error.

#using try and except to handle value error
try: #using the try block
  num=float(input("Enter a number (precision upto atleast one decimal place)= "))
  print("After dividing by 10 we get= ", num/10)
except ValueError: #using the except block 
  print("Please enter a number as per instruction!")

Now, if you enter a string, this is how the output would look:

Enter a number (precision up to at least one decimal place)= Hello
Please enter a number as per instruction!

And, if we give a proper float input, the output would be:

Enter a number (precision upto atleast one decimal place)= 16.663
After dividing by 10 we get=  1.6663000000000001
Handling Value Error Using Try And Except
2 types of output- Handling Value Error Using Try And Except

We can also use the if and not statements with each other along with the isdigit() function. The isdigit() function looks for numbers in a variable and it can be used to check whether a user input is of the desired data type or not.

This is how you can use the if, not statements along with the isdigit() function to identify strings and floats.

#using if, not and isdigit()
num=(input("Enter a number (precision upto atleast one decimal place)= "))
#check if the variable has digits
if not num.isdigit() :
  print("Please enter a number as input!")
else:
  print("After dividing by 10 we get= ", num/10)

If you enter a string, this is the output you would get:

Enter a number (precision upto atleast one decimal place)= hi
Please enter a number as input!

Similar: [SOLVED] ‘Unexpected Keyword Argument’ TypeError in Python.

Wrapping Up: Mastering ValueError Handling in Python

This article deals with the “value error” exception in Python. We have looked at the possible causes of this error and a couple of fixes as well. They are really easy to implement and interpret.

You can use any one of them in your projects as per your requirement. Do you think we should provide extra instructions when asking users for input?