2013-08-31 30 views
8

我无法弄清'bytes'方法在抱怨什么。在下面的代码,我想为我的客户端的认证密钥,我不断收到此错误[1]字节消息参数错误

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

'bytes()'只接受一个字符串参数。试试'message = bytes(“Message”)和'secret = bytes(“secret”)'。 – alecxe

回答

6

bytes()在Python 2.x中与str()相同,它只接受一个字符串参数。

仅使用message = "Message"secret = "secret"。这里甚至不需要bytes()

1

尝试,

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

您遇到此问题的可能原因是您使用的代码是为Python 3.x编写的,并且您是在Python 2.x下执行的。

我知道有人已经部分说明了这一点,但我认为这可能有助于让新手对Python更加清楚,他们可能不知道为什么'utf-8'参数被用作请求问题指出他们不知道这个论点是什么。

任何来到这里的人都会发现,在理解为什么有'utf-8'的论点时很有用。