Have you encountered this error code while coding on Python? Have you had no luck in resolving the problem? Before scouring the internet for an array of potential solutions, try these simple solutions.
They might save you countless hours skimming through various forums for the precise solution to your problem.
This error is one of the most commonly encountered errors while working on a Python code. If you are facing this error, it is probably the cause of a for or while loop on a project.
Essentially, TyperError: ‘NoneType’ object is not iterable means that the object you are attempting to iterate a ‘For’ loop on is a ‘None’ object. ‘NoneType’ can mean various things depending on which Python you are using.
In python2, ‘NoneType’ is the type of ‘None’. In python3, ‘NoneType’ is the class of ‘None’.
Causes of TypeError: ‘NoneType’ object is not iterable
As I alluded to in the intro paragraph, there is a myriad of potential solutions to this issue as there is a myriad of potential causes based on what each individual person has coded to end up at this issue.
However, to simplify this, it is best to start at what the most likely or simple causes of this issue might be.
One of the most probable causes of this error could be that the function returning data is setting the value of the data to ‘None’.
Another common reason could be that you forgot to return any data at all. If you have no data to return, your issue might stem from the fact that you forgot to add a conditional.
Ultimately, the cause of this issue will lie somewhere in the space where you should be returning the data or adding a conditional.
How to Fix TypeError: ‘NoneType’ object is not iterable
While there are a number of different causes for TypeError: ‘NoneType’ object is not iterable, to fix these issues is fairly simple. You must rewrite the final line of code in the set to return the data to the function.
There could be an infinite number of different reasons for why that line of code is not properly returning the data. Therefore, we will go over a number of example problems and solutions below.
1.Check if the Object is ‘None’ or Not
A very common, and rather unobvious, issue that creates TypeError: ‘NoneType’ object is not iterable is that the function returning data is setting the value of the data to ‘None’.
If you believe that this is the case, you can check before iterating on an object if that object is ‘None’ or not. You can do this by following the template below.
def myfunction ( ):
a_list = [1,2,3]
a_list.append(4)
# return a_list
returned_list = myfunction( )
if returned_list is None:
print(“returned list is None”)
else:
for item in returned_list:
# do something with item
2.Write the ‘For’ Loop in the ‘try-except’ Block
If the method above does not work, you might have to write the ‘for’ loop in a ‘try-except’ block. You can do this by following the template below.
def myfunction ( ):
a_list = [1,2,3]
a_list.append(4)
# return a_list
returned_list = myfunction( )
try:
for item in returned_list:
# do something with item
Except Exception as e:
# handle the exception accordingly
3.Assign an Empty List to the Variable if it is ‘None’
If neither of the solutions listed above work for you, try assigning an empty list to the variable. You can do this by following the template below.
def myfunction ( ):
a_list = [1,2,3]
a_list.append(4)
# return a_list
returned_list = myfunction( )
if returned_list is None:
returned_list = [ ]
for item in returned_list:
# do something with item
4.Check for Typos
It is also very likely that the TypeError: ‘NoneType’ object is not iterable issue has been caused by a typo. Double-check your code to make sure you have not made any typos.
Displayed below is an example of a very common type of typo that causes this error.
def remove_duplicates(input_list):
new_list = [ ]
old = 0
if input_list = = new_list:
print “Empty”
else:
for i in input_list:
if i not in new_list:
new_list:append(i)
return new_list
5.Add a Conditional
If you want to avoid running a ‘For’ at all in cases where the object has a ‘None’ value, you must remember to include a conditional. To include a conditional, follow the template below.
if input_list is None
print “No values in input_list”
else:
for input in input_list:
# do stuff with input
There are two issues here. The first issue here is that the final line of code should read “return newlist” and not “return new_list”. The second issue is that the input list is [ ], therefore the if condition should be “if not inputlist”.
Obviously, there are many other potential typos that you may run into writing your own code, however, this example might provide as an excellent reference to double-check your own work and make sure you are free from user error.
In Conclusion
The TypeError: ‘NoneType’ object is not iterable error is one of the most frequently encountered errors while working on a Python code. Therefore, it is possible that the issue could be stemming from a myriad of different problems.
As I alluded to in the intro paragraph, there are a myriad of potential solutions to this issue as there are a myriad of potential causes based on what each individual person has coded to end up at this issue.
However, the solutions I have listed above will provide an excellent reference point regardless of what your particular issue is.
To reiterate, one of the most probable causes of this error could be that the function returning data is setting the value of the data to ‘None’.
Another common reason could be that you forgot to return any data at all. If you have no data to return, your issue might stem from the fact that your forgot to add a conditional.
Ultimately, the cause of this issue will lie somewhere in the space where you should be returning the data or adding a conditional.