TypeError: 'numpy.int64' object is not iterable in Python

Borislav Hadzhiev

Last updated: Apr 20, 2022

Photo from Unsplash

**The Python "TypeError: 'numpy.int64' object is not iterable" occurs when we
try to iterate over an integer or pass an integer 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(10):.**

Here is an example of how the error occurs.

main.py

`import numpy as np arr = np.array([1, 2, 3]) # ⛔️ TypeError: 'numpy.int64' object is not iterable for i in arr[2]: print(i)`

We are trying to iterate over a numpy integer, but integers are not iterable.

We can use the `range()`

built-in function to iterate over a range.

main.py

`import numpy as np arr = np.array([1, 2, 3]) for i in range(arr[2]): print(i) # 👉️ 0, 1, 2`

If you need to iterate over an array, use a basic for loop.

main.py

`import numpy as np arr = np.array([1, 2, 3]) for i in arr: print(i) # 👉️ 1, 2, 3`

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` ) |

If you only pass a single argument to the `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.

Another common cause of the error is passing an integer to the built-in constructors, e.g.

`list()`

, `dict()`

, `tuple()`

and `set()`

.The following 4 calls to the built-in constructors cause the error.

main.py

`import numpy as np arr = np.array([1, 2, 3]) # ⛔️ TypeError: 'numpy.int64' object is not iterable list(arr[0]) dict(arr[0]) tuple(arr[0]) set(arr[0])`

To solve the error, we have to correct the assignment and figure out where the integer value is coming from.

Here are working examples of using the 4 built-ins.

main.py

`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 integer value came from and correct the assignment.

If you need to iterate with both the index and the current item, use the
`enumerate()`

function.

main.py

`import numpy as np arr = np.array([1, 2, 3]) for idx, el in enumerate(arr): print(idx, el) # 👉️ 0 1, 1 2, 2 3`

If you need to check if an object is iterable, use a `try/except`

statement.

main.py

`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 numpy integer to the `iter()`

function,
the `except`

block is run.

main.py

`import numpy as np arr = np.array([1, 2, 3]) try: my_iterator = iter(arr[0]) for i in my_iterator: print(i) except TypeError as te: print(te) # 👉️ 'numpy.int64' 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.

**The Python "TypeError: 'numpy.int64' object is not iterable" occurs when we
try to iterate over an integer or pass an integer 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(10):.**