2013-07-28 16 views
6

Im nowe z Pythonie i programowania Ale nie wydaje się zrozumieć, dlaczego ta funkcja nie aktualizuje zmienną globalnąPython Globalna zmienna nie aktualizowanie

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 

również próbowałem to

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" 

Odpowiedz

12

Musisz zadeklarować to weight jest globalne wewnątrzGetLiveWeight, poza tym.

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

global statement mówi Python, że w zakresie funkcji GetLiveWeight, weight odnosi się do zmiennej globalnej weight, a nie jakiejś nowej zmiennej lokalnej weight.

+1

Dzięki temu próbowałem, ale nadal nie mogę uzyskać funkcji zmiany zmiennej wagi, która zawsze wydaje się być ustawiona na wartość? – Rhys

+1

Czy jesteś pewien, że warunek "interupt == Fałsz" (który jest częściej pisany jako "nie przerywać") jest zawsze prawdziwy? Innymi słowy, czy jesteś pewien, że kod w '' while-loop' jest wykonywany? – unutbu

+0

Tak, dodałem wydruk do pętli while, aby wyprowadzić zmienną masę i działa dobrze. Może to mieć coś wspólnego ze sposobem, że wzywam go 'spróbować: threading.Thread (target = GetLiveWeight) .start() druku żywej masy wyjątkiem: print "Błąd: Nie można uruchomić wątek"' – Rhys