How to fix Python msgpack TypeError: write() argument must be str, not bytes

Problem:

While trying to write an object to a file using msgpack using code like

write_msgpack_text_mode.py
with open("myobj.msgpack", "w") as outfile:
    msgpack.dump(myobj, outfile)

you see an error message like

msgpack_traceback.txt
File /usr/lib/python3/dist-packages/msgpack/__init__.py:26, in pack(o, stream, **kwargs)
    20 """
    21 Pack object `o` and write it to `stream`
    22 
    23 See :class:`Packer` for options.
    24 """
    25 packer = Packer(**kwargs)
---> 26 stream.write(packer.pack(o))

TypeError: write() argument must be str, not bytes

Solution

msgpack writes binary data, so you need to open the file in binary mode using open(..., "wb"):

write_msgpack_binary.py
with open("myobj.msgpack", "wb") as outfile:
    msgpack.dump(myobj, outfile)

 


Check out similar posts by category: Python