Я создал HTTP-сервер в python, который выполняет некоторые криптографические алгоритмы. Поэтому я пытаюсь создать важные переменные для моей криптографии вне метода GET, так как я не хочу, чтобы они менялись после каждого запроса.
Ошибка: Локальная переменная, привязанная до назначения
Вот пример кода:
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
path = self.path
print 'request for ' + path
rootdir = '/Server'
client_mac = path.split('?')[-1]
file_name = path.split('?')[0]
if self.path.split('?')[0].endswith('.txt'):
'''create client ID'''
print 'Printing mac address of connected device ----> %s' % client_mac
id1_secret_key = pre.keyGen(master_secret_key, client_mac)
fr = open (rootdir + file_name)
file_data = fr.read()
sym_key_ciphertext = pre.encrypt(params, client_mac, sym_key);
#more code follows
try:
httpd = HTTPServer(('',8080), Handler)
print 'Server is on and listening to port...7000'
group = PairingGroup('SS512', secparam=1024)
pre = PreGA(group)
(master_secret_key, params) = pre.setup()
print params
sym_key = OpenSSLRand().getRandomBytes(128) #128 bits
sym_cipher = AuthenticatedCryptoAbstraction(sym_key)
server_mac = get_mac()
id2_secret_key = pre.keyGen(master_secret_key, str(server_mac))
httpd.serve_forever()
except KeyboardInterrupt:
print '^C received,shutting down the web server'
server.socket.close()
После excution запроса GET я получаю следующее сообщение об ошибке:
File "server.py", line 157, in do_GET
ciphertext = pre.encrypt(params, client_mac, file_data);
UnboundLocalError: local variable 'params' referenced before assignment
Я должен упомянуть, что переменной Params имеет значение после того, как выполнение pre.setup(). Любые советы были бы полезны и глубоко оценены.
Ваш код не ясен. является частью 'try' внутри или вне функции? внутри или вне класса? пожалуйста, исправьте отступ соответственно – Elazar
Соответствует: http://stackoverflow.com/questions/370357/python-variable-scope-error – Elazar
Тест находится за пределами класса – PL13