локальные переменные «серверы», на которые ссылаются перед назначением

def websvc(currency): db = MySQLdb.connect("localhost", "root", "aqw", "PFE_Project") cursor = db.cursor() sql = "SELECT * FROM myform_composantsserveur" try: cursor.execute(sql) results = cursor.fetchall() currency_in = currency req = urllib2.urlopen('http://rate-exchange.appspot.com/currency?from=USD&to=%s') % (currency_in) req1 = req.read() rate = int(req1['rate']) # rate = 0.77112893299999996 servers = [] for row in results: result = {} result['1'] = row[1] result['3'] = int(row[2]) result['4'] = int(row[3]) result['5'] = int(row[4]) result['6'] = row[5] result['7'] = int(row[6]) result['8'] = row[7] result['9'] = row[8] p = rate * calculations_metric (int(row[2]), int(row[3]), int(row[4]), int(row[6]), row[7]) result['2'] = p keys = result.keys() keys.sort() servers.append(result) except: print "Error: unable to fetch data" db.close() return servers 

но у меня есть эта ошибка при компиляции кода:

Тип исключения: UnboundLocalError

Значение исключения: локальная переменная 'servers', на которую ссылаются перед назначением

Исключение Место: / home / amine / PFE Directory / mysite1 / myform / Webservice.py в websvc, строка 43 Python Исполняемый файл: /usr/bin/python2.7

этот код работает нормально, прежде чем добавить параметр в эту функцию

2 Solutions collect form web for “локальные переменные «серверы», на которые ссылаются перед назначением”

Ваш код не может достичь инициализации серверов, и поэтому вы получаете ошибку. Просто переместите инициализацию перед тем, как попробовать. Измените этот способ:

 def websvc(currency): db = MySQLdb.connect("localhost", "root", "aqw", "PFE_Project") cursor = db.cursor() sql = "SELECT * FROM myform_composantsserveur" servers = [] try: cursor.execute(sql) results = cursor.fetchall() currency_in = currency req = urllib2.urlopen('http://rate-exchange.appspot.com/currency?from=USD&to=%s') % (currency_in) req1 = req.read() rate = int(req1['rate']) # rate = 0.77112893299999996 for row in results: result = {} result['1'] = row[1] result['3'] = int(row[2]) result['4'] = int(row[3]) result['5'] = int(row[4]) result['6'] = row[5] result['7'] = int(row[6]) result['8'] = row[7] result['9'] = row[8] p = rate * calculations_metric (int(row[2]), int(row[3]), int(row[4]), int(row[6]), row[7]) result['2'] = p keys = result.keys() keys.sort() servers.append(result) except: print "Error: unable to fetch data" db.close() return servers 

Я вижу проблему, которую вы отредактировали, чтобы добавить недостающие части. Это обработчик исключений.

Если у вас есть ошибка после try и до servers=[] он перейдет к предложению except, а затем просмотрит return servers и завершит сбой.

Возможно, вы захотите использовать list() вместо использования dict() для эмуляции списка …

Python - лучший язык программирования в мире.