In Python, we have two data types to represent numeric values
float
and
int
. Float data represent the real numbers, and int data type represents the integer number. There are many operations and functions in Python that only support integer numbers, for example, in list indexing, we can not use float numbers there we always need to pass an int value as an index number.
Similarly, there is a
range()
function in Python that only accepts int values, and if we try to pass a float value to the range() function, we will receive the
TypeError: 'float' object cannot be interpreted as an integer
error.
In this Python guide, we will discuss what this error is and how to debug it. We will also walk through a common example of when many people encounter this error. So without further ado, let's get started with the error statement.
Python Error TypeError: 'float' object cannot be interpreted as an integer
The Error statement
TypeError: 'float' object cannot be interpreted as an integer
has two parts separated with a colon
:
.
- TypeError
- 'float' object cannot be interpreted as an integer
1. TypeError
TypeError is a standard Python exception. It is raised in a Python program when we try to perform an invalid operation or pass an invalid data type value to a function.
2. 'float' object cannot be interpreted as an integer
'float' object cannot be interpreted as an integer
is the error message. This error message tells us that the float variable can not be interpreted as an integer, which simply means the Python interpreter is not able to compute the value of float for the function where it was expecting an integer number. You will encounter this error message in your Python program when you try to pass a floating-point number to the
range()
function.
Example
# float number
num = 6.0
# a list from 0 to 5
my_list = list(range(num))
print(my_list)
Output
Traceback (most recent call last):
File "main.py", line 5, in <module>
my_list = list(range(num))
TypeError: 'float' object cannot be interpreted as an integer
The
range()
function accepts an integer value
n
and returns an iterable object from range 0 to
n-1
. In our example, the value of
num
is
6.0
, which is a floating-point number. That's why the
range(num)
statement returns the Error
TypeError: 'float' object cannot be interpreted as an integer
because it was not able to interpret the 6.0 value as 6.
Solution
To solve the above problem, we can need to convert the 6.0 num value to a 6 num value using
int()
function.
# float number
num = 6.0
# int num
num = int(num)
# a list from 0 to 5
my_list = list(range(num))
print(my_list)
Output
[0,1,2,3,4,5]
Common Example Scenario
Often when we take input from the user using the
input()
function, and if we are expecting a numerical value, we convert that input string value to float using the float function.
Example
students = [{'Rank':1,'Name':'Rahul', "Marks":894},
{'Rank':2,'Name':'Jay', "Marks":874},
{'Rank':3,'Name':'Ali', "Marks":870},
{'Rank':4,'Name':'Rohan', "Marks":869},
{'Rank':5,'Name':'Kher', "Marks":856},
{'Rank':5,'Name':'Sofi', "Marks":850},
]
# convert the input number to float (error)
top_n = float(input("How many students details do you want to see?: "))
for i in range(top_n):
print("Rank: ",students[i]['Rank'],"Name: ", students[i]['Name'], "Marks: ", students[i]['Marks'] )
Output
How many students details do you want to see?: 3
Traceback (most recent call last):
File " main.py", line 12, in <module>
for i in range(top_n):
TypeError: 'float' object cannot be interpreted as an integer
Error Reason
In the above example in line 10, we are trying to convert the user input value to a floating-point number. And in line 12, we are passing that same floating-point number to the
range()
function, which leading this error.
Solution
If you ever encounter this situation where you need to ask a numeric value from the user using the
input()
function for the
range()
function. There you should always use the
int()
function and convert the user-entered number to an integer value. Because the range() function only accepts integer numbers.
students = [{'Rank':1,'Name':'Rahul', "Marks":894},
{'Rank':2,'Name':'Jay', "Marks":874},
{'Rank':3,'Name':'Ali', "Marks":870},
{'Rank':4,'Name':'Rohan', "Marks":869},
{'Rank':5,'Name':'Kher', "Marks":856},
{'Rank':5,'Name':'Sofi', "Marks":850},
]
# convert the input number to integer solved
top_n = int(input("How many students details do you want to see?: "))
for i in range(top_n):
print("Rank: ",students[i]['Rank'],"Name: ", students[i]['Name'], "Marks: ", students[i]['Marks'] )
Output
How many students details do you want to see?: 3
Rank: 1 Name: Rahul Marks: 894
Rank: 2 Name: Jay Marks: 874
Rank: 3 Name: Ali Marks: 870
Conclusion
In this Python tutorial, we learned what
TypeError: 'float' object cannot be interpreted as an integer
error is in Python and how to debug it. The Error is raised when we try to pass a floating-point number to the range() function.
To debug this problem, all we need to do is convert the floating-point number to an integer before we pass it as an argument to the range() function.
If you are still getting this error in your Python program, please share your code in the comment section. We will try to help you in debugging.
People are also reading:
- Python typeerror: ‘str’ object is not callable Solution
- Python Iterators
- Python TypeError: ‘method’ object is not subscriptable Solution
- Python Generators
- Python TypeError: ‘function’ object is not subscriptable Solution
- Python Decorators
- Python Error: TypeError: ‘tuple’ object is not callable Solution
- Python ValueError: invalid literal for int() with base 10: Solution
- Python Closures
- Python TypeError: ‘NoneType’ object is not callable Solution
Leave a Comment on this Post