2013-07-28 19 views
6

Im nuovo con Python e la programmazione, ma cant sembra di capire il motivo per cui questa funzione non aggiorna la variabile globalePython globale variabile non aggiornare

global weight 
weight = 'value' 
def GetLiveWeight(): 
    SetPort() 
    while interupt == False: 
     port.write(requestChar2) 
     liveRaw = port.read(9) 
     liveRaw += port.read(port.inWaiting()) 
     time.sleep(0.2) 
     weight = liveRaw.translate(None, string.letters) 
    return weight 

anche ho provato questo

weight = 'value' 
def GetLiveWeight(): 
    global weight 
    SetPort() 
    while interupt == False: 
     port.write(requestChar2) 
     liveRaw = port.read(9) 
     liveRaw += port.read(port.inWaiting()) 
     time.sleep(0.2) 
     weight = liveRaw.translate(None, string.letters) 
    return weight 

try: 
    threading.Thread(target = GetLiveWeight).start() 
    print liveWeight 
except: 
    print "Error: unable to start thread" 

risposta

12

è necessario dichiarare che weight è globale all'interno diGetLiveWeight, non al di fuori di esso.

weight = 'value' 
def GetLiveWeight(): 
    global weight 

Il global statement dice Python che nell'ambito della funzione GetLiveWeight, weight riferisce alla variabile globale weight, non una nuova variabile locale weight.

+1

Grazie, l'ho provato, ma ancora non riesco a ottenere la funzione per modificare la variabile di peso che sembra sempre essere impostata sul valore? – Rhys

+1

Sei sicuro che la condizione 'interupt == False' (che è più comunemente scritta come' not interupt') è sempre True? In altre parole, sei sicuro che il codice all'interno di 'while-loop' sta per essere eseguito? – unutbu

+0

sì, ho aggiunto una stampa nel ciclo while per emettere il peso variabile e funziona bene. Essa può avere qualcosa a che fare con il modo in cui io chiamo e 'provare: threading.Thread (= GetLiveWeight target) .start() stampa peso vivo eccezione: print 'Errore: impossibile avviare il thread'' – Rhys