When you’re working with lists in Python, you might get the following error:
AttributeError: 'NoneType' object has no attribute 'append'
This error occurs when you call the append()
method on a NoneType
object in Python.
This tutorial shows examples that cause this error and how to fix it.
1. calling the append()
method on a NoneType object
To show you how this error happens, suppose you try to call the append()
method on a NoneType
object as follows:
fruit_list = None
fruit_list.append("Apple")
In the above example, the fruit_list
variable is assigned the None
value, which is an instance of the NoneType
object.
When you call the append()
method on the object, the error gets raised:
Traceback (most recent call last):
File "main.py", line 3, in <module>
fruit_list.append("Apple")
AttributeError: 'NoneType' object has no attribute 'append'
To fix this error, you need to call the append()
method from a list object.
Assign an empty list []
to the fruit_list
variable as follows:
fruit_list = []
fruit_list.append("Apple")
print(fruit_list) # ['Apple']
This time, the code is valid and the error has been fixed.
2. Assigning append()
to the list variable
But suppose you’re not calling append()
on a NoneType
object. Let’s say you’re extracting a list of first names from a dictionary object as follows:
customers = [
{"first_name": "Lisa", "last_name": "Smith"},
{"first_name": "John", "last_name": "Doe"},
{"first_name": "Andy", "last_name": "Rock"},
]
first_names = []
for item in customers:
first_names = first_names.append(item['first_name'])
At first glance, this example looks valid because the append()
method is called on a list.
But instead, an error happens as follows:
Traceback (most recent call last):
File "main.py", line 11, in <module>
fruit_list = fruit_list.append(item['first_name'])
AttributeError: 'NoneType' object has no attribute 'append'
This is because the append()
method returns None
, so when you do an assignment inside the for
loop like this:
first_names = first_names.append(item['first_name'])
The first_names
variable becomes a None
object, causing the error on the next iteration of the for
loop.
You can verify this by printing the first_names
variable as follows:
for item in customers:
first_names = first_names.append(item['first_name'])
print(first_names)
The for
loop will run once before raising the error as follows:
None
Traceback (most recent call last):
As you can see, first_names
returns None
and then raises the error on the second iteration.
To resolve this error, you need to remove the assignment line and just call the append()
method:
customers = [
{"first_name": "Lisa", "last_name": "Smith"},
{"first_name": "John", "last_name": "Doe"},
{"first_name": "Andy", "last_name": "Rock"},
]
first_names = []
for item in customers:
first_names.append(item["first_name"])
print(first_names)
Output:
['Lisa', 'John', 'Andy']
Notice that you receive no error this time.
Conclusion
The error “NoneType object has no attribute append” occurs when you try to call the append()
method from a NoneType
object. To resolve this error, make sure you’re not calling append()
from a NoneType
object.
Unlike the append()
method in other programming languages, the method in Python actually changes the original list object without returning anything.
Python implicitly returns None
when a method returns nothing, so that value gets assigned to the list if you assign the append()
result to a variable.
If you’re calling append()
inside a for
loop, you need to call the method without assigning the return value to the list.
Now you’ve learned how to resolve this error. Happy coding! 😃