UnboundLocalError: local variable … referenced before assignment
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import hmac, base64, hashlib, urllib2 base = 'https://.......' def makereq(key, secret, path, data): hash_data = path + chr(0) + data secret = base64.b64decode(secret) sha512 = hashlib.sha512 hmac = str(hmac.new(secret, hash_data, sha512)) header = { 'User-Agent': 'My-First-test', 'Rest-Key': key, 'Rest-Sign': base64.b64encode(hmac), 'Accept-encoding': 'GZIP', 'Content-Type': 'application/x-www-form-urlencoded' } return urllib2.Request(base + path, data, header) |
错误:文件"c:/python27/bctest.py",第8行,在makereq中hmac=str(hmac.new(secret,hash_data,sha512))。UnboundLocalError:分配前引用了局部变量"hmac"
有人知道为什么?谢谢
如果在函数的任何位置指定变量,则该变量在该函数的任何位置都将被视为局部变量。因此,您将看到以下代码中的相同错误:
1 2 3 4 | foo = 2 def test(): print foo foo = 3 |
换句话说,如果同名函数中存在局部变量,则无法访问全局变量或外部变量。
要解决这个问题,只需给局部变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def makereq(key, secret, path, data): hash_data = path + chr(0) + data secret = base64.b64decode(secret) sha512 = hashlib.sha512 my_hmac = str(hmac.new(secret, hash_data, sha512)) header = { 'User-Agent': 'My-First-test', 'Rest-Key': key, 'Rest-Sign': base64.b64encode(my_hmac), 'Accept-encoding': 'GZIP', 'Content-Type': 'application/x-www-form-urlencoded' } return urllib2.Request(base + path, data, header) |
注意,这种行为可以通过使用
您正在重新定义函数范围内的