'How do I 'declare' an empty bytes variable?

How do I initialize ('declare') an empty bytes variable in Python 3?

I am trying to receive chunks of bytes, and later change that to a utf-8 string. However, I'm not sure how to initialize the initial variable that will hold the entire series of bytes. This variable is called msg. I can't initialize it as None, because you can't add a bytes and a NoneType. I can't initialize it as a unicode string, because then I will be trying to add bytes to a string. Also, as the receiving program evolves it might get me in to a mess with series of bytes that contain only parts of characters. I can't do without a msg initialization, because then msg would be referenced before assignment. The following is the code in question

def handleClient(conn, addr):
    print('Connection from:', addr)
    msg = ?
    while 1:
        chunk = conn.recv(1024)
        if not chunk:
            break
        msg = msg + chunk
    msg = str(msg, 'UTF-8')
    conn.close()
    print('Received:', unpack(msg))


Solution 1:[1]

Just use an empty byte string, b''.

However, concatenating to a string repeatedly involves copying the string many times. A bytearray, which is mutable, will likely be faster:

msg = bytearray()  # New empty byte array
# Append data to the array
msg.extend(b"blah")
msg.extend(b"foo") 

To decode the byte array to a string, use msg.decode(encoding='utf-8').

Solution 2:[2]

Use msg = bytes('', encoding = 'your encoding here').

Encase you want to go with the default encoding, simply use msg = b'', but this will garbage the whole buffer if its not in the same encoding

Solution 3:[3]

bytes() works for me;

>>> bytes() == b''
True

Solution 4:[4]

As per documentation:

Blockquote socket.recv(bufsize[, flags]) Receive data from the socket. The return value is a string representing the data received. Blockquote So, I think msg="" should work just fine:

>>> msg = ""
>>> msg
''
>>> len(msg)
0
>>>

Solution 5:[5]

To allocate bytes of some arbitrary length do

bytes(bytearray(100))

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Dr. Sahib
Solution 3 jorijnsmit
Solution 4 PSS
Solution 5 philn