2013-08-31 24 views
8

Non riesco a capire di cosa si lamenta il metodo 'bytes'. Nel codice di seguito, sto cercando di generare una chiave di autenticazione per il mio cliente e io continuo a ricevere questo errore [1]Errore messaggio messaggio byte

import hmac 
import hashlib 
import base64 

message = bytes("Message", 'utf-8') # errors here 
secret = bytes("secret", 'utf-8') 

signature = base64.b64encode(hmac.new(secret, message, digestmod=hashlib.sha256).digest()); 
print(signature) 

[1]

Traceback (most recent call last): 
    File "API/test/auth-client.py", line 11, in <module> 
    message = bytes("Message", 'utf-8') 
TypeError: str() takes at most 1 argument (2 given) 
+2

'byte()' accetta solo un argomento stringa. Prova solo 'message = bytes (" Message ")' e 'secret = bytes (" secret ")'. – alecxe

risposta

6

bytes() in Python 2.x è lo stesso di str() e accetta solo un argomento di stringa.

Utilizzare solo message = "Message" e secret = "secret". Non hai nemmeno bisogno di bytes() qui.

1

tentativo,

import hmac 
import hashlib 
import base64 

message = bytes("Message") 
secret = bytes("secret") 

signature = base64.b64encode(hmac.new(secret, message, digestmod=hashlib.sha256).digest()) 
print(signature) 
6

Il probabile motivo per cui si è verificato questo problema è che il codice che stavi utilizzando è stato scritto per Python 3.x e l'hai eseguito in Python 2.x.

So che qualcuno lo ha già parzialmente dichiarato, ma ho pensato che potrebbe essere utile rendere più chiaro alle persone nuove in Python che potrebbero non rendersi conto del perché l'argomento 'utf-8' veniva usato come la persona che chiedeva la domanda ha rilevato che non sapevano a cosa serviva l'argomento.

Chiunque venga qui può trovare utile capire perché c'era un argomento di "utf-8".