“TypeError: argumento de cadena sin una encoding”, pero la cadena está codificada?

Estoy trabajando para convertir un progtwig existente de Python2 a Python3. Uno de los métodos en el progtwig autentica al usuario con un servidor remoto. Le pedirá al usuario que ingrese una contraseña.

def _handshake(self): timestamp = int(time.time()) token = (md5hash(md5hash((self.password).encode('utf-8')).hexdigest() + str(bytes('timestamp').encode('utf-8')))) auth_url = "%s/?hs=true&p=1.2&u=%s&t=%d&a=%s&c=%s" % (self.name, self.username, timestamp, token, self.client_code) response = urlopen(auth_url).read() lines = response.split("\n") if lines[0] != "OK": raise ScrobbleException("Server returned: %s" % (response,)) self.session_id = lines[1] self.submit_url = lines[3] 

El problema con este método es que después de que el entero se convierte en una cadena, necesita ser codificado. Pero por lo que puedo decir, ya está codificado? Encontré esta pregunta pero me estaba costando mucho aplicarla en el contexto de este progtwig.

Esta es la línea que me está dando problemas.

  • + str(bytes('timestamp').encode('utf-8'))))
    • TypeError: string argument without an encoding

He intentado jugar con formas alternativas de hacer esto, todos con diferentes tipos de errores.

  • + str(bytes('timestamp', 'utf-8'))))
    • TypeError: Unicode-objects must be encoded before hashing
  • + str('timestamp', 'utf-8')))
    • TypeError: decoding str is not supported

Todavía estoy empezando a aprender Python (pero tengo conocimientos de principiante a intermedio de Java), así que todavía no estoy completamente familiarizado con el idioma. ¿Alguien tiene alguna idea sobre cuál podría ser este problema?

¡Gracias!

Este error se debe a cómo crea bytes en Python 3.

No hará bytes("bla bla") sino solo b"blabla" o deberá especificar un tipo de encoding como bytes("bla bla","utf-8") porque necesita saber cuál era la encoding original antes convirtiéndolo en una serie de números.

Entonces el error

 TypeError: string argument without an encoding 

Debe desaparecer.

Tienes bytes o str. Si tiene un valor de bytes y desea convertirlo en str, debe hacer:

 my_bytes_value.decode("utf-8") 

Y te devolverá un str.

¡Esperaba que te ayude! Que tengas un buen día !