2013-04-11 3 views
0

Я использую функцию для вычисления цен на серверы, поэтому я сделал функцию, которая извлекает цены на уровне сервера для серверов и вычисляет стоимость сервера для каждого сервера exsit в моей БД, но я пытаюсь запустить эта функция, я получаю эту ошибку:UnboundLocalError: локальная переменная 'Core_prices', на которую ссылаются перед назначением

function.py 

import MySQLdb 

def calculations_metric (param) : 
    db = MySQLdb.connect("localhost", "root", "aqw", "PFE_Project") 
    cursor = db.cursor() 
    sql = "SELECT * FROM examples_calculationsmetric" 
    cursor.execute(sql) 
    results = cursor.fetchall() 
    for row in results: 
     RAM_prices = int(row[1]) 
     Core_prices = int(row[2]) 
     HHD_SATA_prices =int(row[3]) 
     HHD_SSD_prices =int(row[4]) 
     CPU_priority = int(row[5]) 
     Avaibility = int(row[6]) 
    db.close() 

    db1 = MySQLdb.connect("localhost", "root", "aqw", "PFE_Project") 
    cursor1 = db1.cursor() 
    sql1 = "SELECT * FROM examples_servercomponents WHERE id ='%d'" %(param) 
    cursor1.execute(sql1) 
    results1 = cursor1.fetchall() 
    for row in results1: 
     if row[6] == 'SATA': 
      Core_price = int(row[2]) * Core_prices # the error is here 
      Priority_price = int(row[3]) * CPU_priority 
      RAM_price = int(row[4]) * RAM_prices 
      HDD_price = int(row[5]) * HHD_SATA_prices 
      Availibility_price = int(row[7])*Avaibility 

     elif row[6] == 'SSD': 
      Core_price = int(row[2]) * Core_prices 
      Priority_price = int(row[3]) * CPU_priority 
      RAM_price = int(row[4]) * RAM_prices 
      HDD_price = int(row[5]) * HHD_SSD_prices 
      Availibility_price = int(row[7])*Avaibility 

    price = Core_price + Priority_price + RAM_price + HDD_price + Availibility_price 
    db1.close() 
    return price 

я не понимаю, что это ошибка, так что если кто-нибудь может помочь я буду так благодарен

+1

Почему вы подключаетесь к одной и той же базе данных дважды, как вопрос интереса? Почему не просто * повторно использовать * первое соединение для второго запроса? –

ответ

1

Когда ваш SELECT * FROM examples_calculationsmetric не возвращает никаких результатов, Core_prices является никогда не устанавливаются (и другие переменные в этом цикле).

имена Python не существуют до тех пор, пока назначены, так что если results является пустым списком, имена внутри цикла for никогда не получить назначены и, таким образом, сделать не существуют к тому времени вы перебираете results1 позже.

Вы можете установить значения по умолчанию для этих имен в качестве обходного:

RAM_prices = 0 
Core_prices = 0 
HHD_SATA_prices = 0 
HHD_SSD_prices = 0 
CPU_priority = 0 
Avaibility = 0 

по крайней мере убедиться, что они определены.

+0

ошибка была в том, что examples_calculationsmetric Table был пуст. в этой таблице нет строки. сейчас работает – Imoum

Смежные вопросы

 Смежные вопросы