Skip to main content

How to Solve "AttributeError: 'str' object has no attribute 'append'" in Python

The AttributeError: 'str' object has no attribute 'append' error in Python occurs when you try to use the list method append() on a string object. Strings are immutable in Python and do not have an append() method.

This guide explains the causes of this error and provides the correct solutions.

Understanding the Error: Lists vs. Strings

The append() method is a list method, used to add elements to the end of a list:

my_list = ['tutorial', 'reference', '.']
my_list.append('com') # Correct: Lists have an append() method
print(my_list) # Output: ['tutorial', 'reference', '.', 'com']

Strings, on the other hand, are immutable sequences of characters. You can not modify them in place, and they don't have an append() method:

a_str = 'tutorialreference'

# ⛔️ AttributeError: 'str' object has no attribute 'append'
# a_str.append('.com') # WRONG: Strings don't have append()

Common Causes and Solutions

Incorrect Variable Type

The most common cause is simply using a string variable when you intended to use a list:

my_list = ['a', 'b', 'c']

# Mistakenly reassigning to a string:
my_list = 'hello' # Now my_list is a string, NOT a list

# ⛔️ AttributeError: 'str' object has no attribute 'append'
# my_list.append('d')
  • Solution: Make sure that the variable you think is a list actually refers to a string.
note

You can check the type of a variable with the type() function:

my_list = ['a', 'b', 'c']

# Mistakenly reassigning to a string:
my_list = 'hello'
print(type(my_list)) # Output: <class 'str'>

Accidental String Assignment

Another common mistake is accidentally assigning a string to a variable that was originally a list:

my_list = ['a', 'b', 'c']
# ... some other code ...
my_list = ','.join(my_list) # Now my_list is a STRING: "a,b,c"

# ⛔️ AttributeError: 'str' object has no attribute 'append'
# my_list.append('d')

#Solution
my_list = ['a', 'b', 'c']
my_list = ','.join(my_list)
print(my_list) # Output: a,b,c

my_list = my_list.split(',') # Reassign to a list
print(my_list) # Output: ['a', 'b', 'c']

my_list.append('d')
print(my_list) # Output: ['a', 'b', 'c', 'd']
  • Solution: Be very careful when using methods like str.join() that return strings. If you need a list, make sure to reassign the result to a list. Descriptive variable names (e.g., my_list vs. my_string) also help prevent this.

Incorrect List Access

my_list = ['a', 'b', 'c']

# ⛔️ AttributeError: 'str' object has no attribute 'append'
# my_list[2].append('d')
  • Solution: If you intend to modify the list, use append() directly on the list. If you want to concatenate a string, use + or f-strings, but don't try to append() to a string within the list.

Alternatives for String Concatenation

If you are working with strings and want to add to them, you can not use append(). Instead, use one of these string concatenation methods:

The + Operator

str_1 = 'tutorial'
str_2 = 'com'
result = str_1 + 'reference.' + str_2
print(result) # Output: tutorialreference.com

f-strings (Formatted String Literals)

str_1 = 'tutorial'
str_2 = '.com'
result = f'{str_1}reference{str_2}'
print(result) # Output: tutorialreference.com

str.join()

my_list = ['tutorial', 'reference', 'com']
a_str = ".".join(my_list)
print(a_str) # Output: tutorial.reference.com

Debugging Strategies

If you encounter this error, here's how to track down the problem:

  1. print(type(your_variable)): Immediately before the line causing the error, print the type of the variable. This will confirm whether it's a list or a string.
  2. print(your_variable): Print the value of the variable. This can help you see if it's unexpectedly a string.
  3. Trace Backwards: Look at where your_variable is assigned. Is there a place where it's being assigned a string value instead of a list? Follow the variable's assignments through your code.
  4. Use your IDE debugging tools. All modern IDEs support stepping through the code to check the value and type of variables.

Conclusion

The AttributeError: 'str' object has no attribute 'append' error is a common one, but easily fixed once you understand the cause. It stems from mistaking a string for a list.

By using the techniques in this guide, you should be able to handle cases that might create this error.

  • Make sure that you're calling append() on a list, and use string concatenation techniques (+, f-strings, join()) when working with strings.
  • Always check the types of your variables when in doubt!