How to fix typeerror can only concatenate str (not “bytes”) to str in Python?

The reason for the type error can’t concatenate string to a byte object, when you try to bring together a Python string and a Python byte objects. You can solve this issue by either encoding your string or decoding your bytes objects and only then concatenate them.

Understanding the can’t concat str error message

Assume that you read data from a text or csv file into a Python string. As part of your processing, you try to join that string with a bytes object:

# read the contents of a file to a Python string

from pathlib import Path
file_path = Path(r"C:\Work_Dir\my_file.txt")

with open (file_path, 'r') as f:
    file_str = f.read()

# define  a bytes object
my_bytes = bytes( 'and this is a bytes object', 'windows-1255')

Let’s now concatenate the objects:

file_str + my_bytes

This will render the following typeerror exception – screenshot taken from Jupyter. You will get similar messages in PyCharm, VS Code, Spyder and others

You might as well get the following error:

typeerror: can't concat str to bytes

Solving the can only concat bytes type error

You can fix the error in several ways, here are a couple of ideas:

Convert string to bytes

You can cast your Python string as a bytes object and join it with other byte:

#Python3
my_byte_str  = bytes (file_str, encoding='windows-1255') + my_bytes
print(my_byte_str)

Note: When converting to bytes, make sure to define the encoding format (in our case – ‘windows-1255’) of your string.

Convert bytes to string

Other option is to do the opposite, that is to convert your bytes object to string. This could be a better option if you would like to take advantage of the string manipulation capabilities in Python.

#Python3
my_concat_str = file_str + str(my_bytes.decode())
print(my_concat_str)

Note: You might have encountered this error when combining two or more different columns of a pandas DataFrame. If so, you might want to use the following command to convert your pandas column / series from bytes to string and then concatenate the columns.

Additional learning

How to split a Python string object to words?