Borislav Hadzhiev
Last updated: Apr 20, 2022
Check out my new book
The Python "TypeError: 'float' object is not iterable" occurs when we try to
iterate over a float or pass a float to a built-in function like, list()
or
tuple()
. To solve the error, use the range()
built-in function to iterate
over a range, e.g. for i in range(int(3.0)):
.
Here is an example of how the error occurs.
my_float = 3.1 # ⛔️ TypeError: 'float' object is not iterable for i in my_float: print(i)
We are trying to iterate over a floating-point number, but floats are not iterable.
We can use the range()
built-in function to iterate over a range.
my_float = 3.1 for i in range(int(my_float)): print(i) # 👉️ 0 1 2
int()
function to convert the float to an integer because the range function expects an integer argument.The range function is
commonly used for looping a specific number of times in for
loops and takes
the following parameters:
Name | Description |
---|---|
start | An integer representing the start of the range (defaults to 0 ) |
stop | Go up to, but not including the provided integer |
step | Range will consist of every N numbers from start to stop (defaults to 1 ) |
range()
constructor, it is considered to be the value for the stop
parameter.If values for the start
and stop
parameters are provided, the start
value
is inclusive, whereas the stop
value is exclusive.
my_float = 3.1 for i in range(1, int(my_float)): print(i) # 👉️ 1 2
list()
, dict()
, tuple()
and set()
.The following 4 calls to the built-in constructors cause the error.
my_float = 3.1 # ⛔️ TypeError: 'float' object is not iterable list(my_float) dict(my_float) tuple(my_float) set(my_float)
To solve the error, we have to correct the assignment and figure out where the float value is coming from.
Here are working examples of using the 4 built-ins.
l = list(['a', 'b', 'c']) print(l) # 👉️ ['a', 'b', 'c'] d = dict(name='Alice', age=30) print(d) # 👉️ {'name': 'Alice', 'age': 30} t = tuple([1, 2, 3]) print(t) # 👉️ (1, 2, 3) s = set(['a', 'b', 'a']) print(s) # 👉️ {'a', 'b'}
You have to figure out where the float value came from and correct the assignment.
If you need to iterate with both the index and the current character or element,
use the enumerate()
function.
my_str = 'hello' for idx, c in enumerate(my_str): print(idx, c) # 👉️ 0 h, 1 e, 2 l... my_list = ['a', 'b', 'c'] for idx, el in enumerate(my_list): print(idx, el) # 👉️ 0 a, 1 b, 2 c
If you need to check if an object is iterable, use a try/except
statement.
my_str = 'hello' try: my_iterator = iter(my_str) for i in my_iterator: print(i) # 👉️ h, e, l, l, o except TypeError as te: print(te)
The iter() function
raises a TypeError
if the passed in value doesn't support the __iter__()
method or the sequence protocol (the __getitem__()
method).
If we pass a non-iterable object like a float to the iter()
function, the
except
block is ran.
my_float = 3.5 try: my_iterator = iter(my_float) for i in my_iterator: print(i) except TypeError as te: print(te) # 👉️ 'float' object is not iterable
Examples of iterables include all sequence types (list
, str
, tuple
) and
some non-sequence types like dict
, file objects and other objects that define
an __iter__()
or a __getitem__()
method.