4
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'

例外の場所: websvc の /home/amine/PFE Directory/mysite1/myform/Webservice.py、43 行目 Python 実行可能ファイル: /usr/bin/python2.7

このコードは、この関数にパラメーターを追加する前に正常に機能します

4

2 に答える 2

5

コードがサーバーの初期化に到達できないため、エラーが発生します。try..except の前に初期化を移動するだけです。このように変更します。

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
于 2013-03-14T10:11:09.613 に答える
0

不足している部分を追加するために編集したので、問題が発生しました。例外ハンドラです。

try前後にエラーがある場合はservers=[]、except 句にジャンプします。参照return serversして失敗します。

リストをエミュレートするためlist()に を使用する代わりに、 を使用したい場合があります ...dict()

于 2013-03-14T10:12:09.363 に答える