variable local ‘servidores’ referenciados antes de la asignación

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 

Pero tengo este error al comstackr el código:

Tipo de excepción: UnboundLocalError

Valor de excepción: variable local ‘servidores’ referenciados antes de la asignación

Ubicación de excepción: / home / amine / PFE Directory / mysite1 / myform / Webservice.py en websvc, línea 43 Python Executable: /usr/bin/python2.7

este código funciona normalmente antes de agregar un parámetro en esta función

Tu código no puede alcanzar la inicialización de los servidores y es por eso que obtienes un error. Simplemente mueva la inicialización antes de intentar … excepto. Cambia de esta manera:

 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 

Veo el problema ahora que lo has editado para agregar las partes faltantes. Es el controlador de excepciones.

Si tiene un error después de try y antes de los servers=[] , saltará a la cláusula de excepción, luego vea los return servers y fallará.

Es posible que desee utilizar una list() , en lugar de usar un dict() para emular una lista …