In Python Shell, I entered:
aList = ['a', 'b', 'c', 'd'] for i in aList: print(i)
and got
a b c d
but when I tried:
aList = ['a', 'b', 'c', 'd'] aList = aList.append('e') for i in aList: print(i)
and got
Traceback (most recent call last): File "<pyshell#22>", line 1, in <module> for i in aList: TypeError: 'NoneType' object is not iterable
Does anyone know what's going on? How can I fix/get around it?
In general, the error means that you attempted to index an object that doesn't have that functionality. You might have noticed that the method sort() that only modify the list have no return value printed – they return the default None. This is a design principle for all mutable data structures in Python.
append() is an in-place operation, meaning that it modifies the state of the list , instead of returning a new list object. All functions in Python return None unless they explicitly return something else. The method a. append() modifies a itself, which means that there's nothing to return.
The error “TypeError: 'NoneType' object is not iterable” occurs when you try to iterate over a NoneType object. Objects like list, tuple, and string are iterables, but not None. To solve this error, ensure you assign any values you want to iterate over to an iterable object.
list.append
is a method that modifies the existing list. It doesn't return a new list -- it returns None
, like most methods that modify the list. Simply do aList.append('e')
and your list will get the element appended.
Generally, what you want is the accepted answer. But if you want the behavior of overriding the value and creating a new list (which is reasonable in some cases^), what you could do instead is use the "splat operator", also known as list unpacking:
aList = [*aList, 'e'] #: ['a', 'b', 'c', 'd', 'e']
Or, if you need to support python 2, use the +
operator:
aList = aList + ['e'] #: ['a', 'b', 'c', 'd', 'e']
^ There are many cases where you want to avoid the side effects of mutating with .append()
. For one, imagine you want to append something to a list you've taken as a function argument. Whoever is using the function probably doesn't expect that the list they provided is going to be changed. Using something like this keeps your function "pure" without "side effects".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With