0

関数を使用してサーバーの価格を計算するので、サーバー コンポーネントのデフォルトの価格を取得し、DB 内の各サーバーの exsit のサーバーの価格を計算する関数を作成しましたが、この関数を実行しようとすると、次のエラーが発生します。

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  

エラーの意味がわからないので、誰か助けてくれればとても助かります

4

1 に答える 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

少なくともそれらが定義されていることを確認します。

于 2013-04-11T13:54:00.397 に答える