With the help of a Python string
join()
method, we can concatenate all the string values of an iterable object to a new string. The join() method accepts the iterable object as an argument value and concatenates the strings present in the iterable object.
But if we pass a non-iterable object to the join() method, we will encounter the
TypeError: can only join an iterable
Error.
In this Python guide, we will discuss this error in detail and see how to debug it in a Python program. We will also walk through an example to understand this error in detail.
So let's get started with the error statement.
Python Error: TypeError: can only join an iterable
Python string is a sequence of characters, and if we wish to concatenate an iterable object of string values as a single list object, we can use the string join() method.
The string
join()
method accepts an iterable object of string values as an argument and joins all the string values of the iterable with the separator string value.
Syntax
seperator_string.join(iterableobject)
Example
msg_list = ['Hello', 'World', 'Welcome', 'to', 'TechgeekBuzz']
message = "-".join(msg_list) #join the msg_list elements
print(message)
#Output
'Hello-World-Welcome-to-TechgeekBuzz'
The join() method only accepts an iterable object as an argument value, and if we pass a not iterable object like
int
,
float
, and
function
to the
join
method, it will raise the
TypeError: can only join an iterable
Error.
The Error statement
TypeError: can only join an iterable
has two parts Exception Type and an Error message.
- TypeError (Exception Type)
- can only join an iterable (Error Message)
1. TypeError
The TypeError is one of the Python standard exceptions, and it is raised in a Python program when we specify an inappropriate operation on a Python object or pass an invalid data type argument to a function or method.
2. can only join an iterable
The "
can only join an iterable
" statement is an Error Statement that tags along the Python's TypeError. This error message is raised in a Python program when passing a non-iterable data object to the join method. The join method can only join an iterable object of string values, and if we pass a non-iterable object to a join method, it will throw the TypeError with the "can only join an iterable" message.
Common Example Scenario
Let's say we have a list of students' Names, and we wish to print all the students' names as a single string value after sorting the student names in ascending order.
To sort the student name lists, we use the list sort method, and to print all the students' names as a single string value, we can join all the students' names using the
join()
method.
Example Error.
# students as list
students = ['Rahul', 'Ajay', 'Riya', 'Dinesh', 'Kumar', 'Sahu', 'Sofi']
# sort the students
students = students.sort()
# join all students as a string
all_students = '-'.join(students)
print(all_students)
Output
Traceback (most recent call last):
File "app.py", line 8, in <module>
all_students = '-'.join(students)
TypeError: can only join an iterable
Break The code
In the above example, we are getting the error in line 8 with "
all_students = '-'.join(students)
" Statement.
This is because in line 8, the value of
students
was
None
. In line 5, when we sort the
students
list using
students.sort()
method and assign the value to the students, it made the
students
value to None.
The list
sort()
method perform the in-place sorting and return a
None
value. And when we assign the value to
students.sort()
to
students
in line 5, the value of
students
became
None
and when we pass that
None
value to the
join
() method raised the Error.
Solution
To solve the above problem, we need to ensure that the
students
value we are passing to the
join()
method must be a list, not a None object. And when we talk about the above problem, there we do not need to assign the
students.sort()
return value to the
students
. The sort() method will sort the
students
list in place, and we can pass that to the
join()
method.
# students as list
students = ['Rahul', 'Ajay', 'Riya', 'Dinesh', 'Kumar', 'Sahu', 'Sofi']
# sort the students
students.sort()
# join all students as a string
all_students = '-'.join(students)
print(all_students)
Output
Ajay-Dinesh-Kumar-Rahul-Riya-Sahu-Sofi
Conclusion
The "TypeError: can only join an iterable" error is one of the most common errors you would encounter while working with converting a list of string values to a string. This Error is raised in a program when we assign a non-iterable value to the join method. So whenever you encounter this error in your program, you need to ensure that the value you are trying to pass to the join() method is an iterable object at that part of the program.
If you are still getting this error in your Python program, please share your code and query in the comment section. We will try to help you in debugging.
People are also reading:
- Python TypeError: unsupported operand type(s) for +: ‘NoneType’ and ‘str’ Solution
- What is Pyramid in Python?
- Python IndentationError: unindent does not match any outer indentation level Solution
- Client Library API for Docker in Python
- Python TypeError: Method_Name() missing 1 required positional argument: ‘self’ Solution
- What is CherryPy Python? – Introduction to CherryPy
- Python AttributeError: A Complete Guide
- How to remove Empty string from a List of Strings in Python
- Python TypeError: ‘float’ object is not callable Solution
- Read File in Python
Leave a Comment on this Post