Fixing Python Error Message: typeerror: a bytes-like object is required, not ‘str’

I’ll summarize this error in a single phrase: “close but no cigar”. The quick version: you’ve handed a Python function a string (str object) and it is expecting a lower level binary version of the data. This is frequently encountered when the Python script involves low level file operations, where you’re reading binary level data from files on disk or through an import socket.

Your Python script is expecting to engage in some low level poking & prodding to unpack and analyze the data… and you’ve handed them a vanilla high level str object. The function expects the data to load as a bytearray data type. Instead you are accessing this bytearray as if it were just another one of your Unicode strings. Tsk Tsk…

How to Fix this Typeerror:

The fix is easy… give your Python function what it is looking for: a bytes like object (data structure) such as a binary file where it can do low level scanning and operations. Generally this is where you’re trying to unpack or transform a byte type object down at the individual bit level. I’ve used these for file compression routines, cryptography programs, and converting various bytes object data formats (usually from non-US and/or non-consumer facing data systems).

Like most type conversion errors, the preferred approach to solving this issue is to review your data sources to make sure you haven’t messed up anything else in the conversion process. You expected to read binary data, you got a string. Check the code around imports and the chain of actions which led to the function which threw the error. Perhaps you accidently converted the bytes type object into a string in a declaration or accepting the default result of another function.

The other option is override the default type casting process to force the data into a more familiar format . Assuming you’re expecting unicode strings (unicode characters). There are several different methods you can use to implement this.

First, you can change the string object used in the split() function into a binary byte string format by placing the prefix b before the string. This means changing split(‘str’) to split(b’str’).

Second, you have the option of using the decode() function. This will turn the binary data into string data and enable you to process allows you to process the data as a string.

Third, there is the encode method, encode(), to convert the string used in the split() function into a binary format. It effectively works the same as placing the prefix b before the string. These two encoding argument fixes are essentially the same, differ mainly in style.

Finally, you have the option of opening the file in text mode rather than binary mode. The difference between the two is as follows. This solution fixes the problem, by actually fixing the cause of the problem, rather than working around it. This error message is not only easy to fix if you encounter it, but it is an easy one to avoid in the first place.

The ultimate solution to this error is to fix your input sources so you’re correctly processing any byte like object as binary data. There’s an issue with your bytes class decode method. Or harden your script so you’re correctly processing a string in read mode (including managing any str error calls via your default encoding scheme and unicode sequences). In any event, you’re mixing apples and oranges here… pick one and use it.

Scroll to top