Skip to main content

How to Resolve "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!