Skip to main content

How to Solve "AttributeError: 'list' object has no attribute 'split'" in Python

The AttributeError: 'list' object has no attribute 'split' error in Python occurs when you try to call the string method split() on a list object.

This guide explains why this error occurs and provides the correct ways to split strings within lists, and how to handle this when reading files.

Understanding the Error: split() is a String Method

The split() method is a string method, not a list method. It's used to break a string into a list of substrings based on a delimiter (by default, whitespace).

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

# ⛔️ AttributeError: 'list' object has no attribute 'split'
# print(my_list.split('-')) # WRONG: my_list is a list, not a string

You can not call split() directly on a list. You need to call it on a string object.

Solutions

Here are the correct ways to handle situations where you encounter this error:

Accessing String Elements within a List

If you have a list containing strings, and you want to split one of those strings, access the specific string element by its index:

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

result = my_list[0].split('-') # Access the string at index 0
print(result) # Output: ['a', 'b']
  • my_list[0] accesses the string 'a-b' at index 0.
  • split('-') is then called on this string, splitting it at the hyphen.

Iterating and Splitting Strings in a List

If you need to split every string in a list, use a for loop or a list comprehension:

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

# Using a for loop (and appending to a new list)
new_list = []
for item in my_list:
new_list.append(item.split('-'))
print(new_list) # Output: [['a', 'b'], ['c', 'd']]

# Using a list comprehension (more concise)
result = [item.split('-') for item in my_list]
print(result) # Output: [['a', 'b'], ['c', 'd']]
  • Both approaches iterate through each string in my_list and apply the split('-') method to each string.
  • The list comprehension is equivalent to the loop version.

If you want to create a flat list with all of the elements (not nested), you can use a nested for loop to iterate through all the items of the list:

my_list = ['a-b', 'c-d']
result_3 = [item.split('-') for item in my_list] # Nested List
result_3_flat = [item for l in result_3 for item in l] # Flattens the list
print(result_3_flat) # Output: ['a', 'b', 'c', 'd']

Splitting Lines from a File

When reading a file, you often get a list of strings (one string per line). You can then split each line as needed:

# example.txt contains
# name,age,country
# Alice,30,Austria
# Tom,25,Italy
# Carl,40,Canada

with open('example.txt', 'r', encoding="utf-8") as f:
for line in f:
new_list = line.strip().split(',') # Remove newline and split
print(new_list)

Output:

['name', 'age', 'country']
['Alice', '30', 'Austria']
['Tom', '25', 'Italy']
['Carl', '40', 'Canada']
  • for line in f: iterates directly over the lines of the file (more efficient than readlines()).
  • Always strip whitespace with line.strip() before splitting, as lines will typically end with a \n newline.

Splitting characters of list element without separator

my_list = ['hello']

result = [char for char in my_list[0]] # Access string and iterate.

print(result) # Output: ['h', 'e', 'l', 'l', 'o']

Debugging AttributeError: 'list' object has no attribute 'split'

If you are getting the error, follow these debugging steps:

  • Check the Type: Use type(your_variable) to confirm the variable's actual type.
  • Print Intermediate Values: Print the variable you're calling .split() on immediately before the line that causes the error. This will show you exactly what you're working with.
  • Inspect Loops: If the error occurs inside a loop, double-check that you're accessing the correct element within the loop (e.g., my_list[i] instead of my_list).
  • Review File Reading: If you're reading from a file, ensure you're iterating correctly over lines or using readlines() appropriately.

Conclusion

The AttributeError: 'list' object has no attribute 'split' error is a clear indication that you're trying to use a string method on a list.

This guide showed you how to identify the cause of the error and fix it by either:

  • Accessing the correct string element within the list.
  • Iterating through the list and applying split() to each string element.
  • Ensuring you are working with a string, not a list, when calling split().

By following these steps, you'll be able to correctly split strings within your lists and avoid this common error.