2013-04-11 125 views
0

我用一個函數計算服務器的價格,所以我做這檢索服務器組件的defalut價格,並計算服務器的價格在我的數據庫的每臺服務器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

作爲一個感興趣的問題,爲什麼要連接兩次相同的數據庫?爲什麼不重新使用第二個查詢的第一個連接? – 2013-04-11 13:55:51

回答

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表爲空。該表中沒有行。 它現在有效 – Imoum 2013-04-11 14:14:56

相關問題