2013-07-28 39 views
6

Im mới với Python và lập trình nhưng không thể dường như để hiểu tại sao chức năng này không cập nhật các biến toàn cầuBiến Python toàn cầu không cập nhật

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 

Tôi cũng đã cố gắng này

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" 

Trả lời

12

Bạn cần phải khai báo rằng weight là toàn cầu bên trongGetLiveWeight, không phải bên ngoài nó.

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

Các global statement nói với Python rằng trong phạm vi của GetLiveWeight chức năng, weight đề cập đến biến toàn cầu weight, không phải một số biến địa phương mới weight.

+1

Cảm ơn tôi đã thử điều đó, nhưng tôi vẫn không thể có được chức năng để thay đổi biến trọng lượng, nó luôn luôn có vẻ ở lại thiết lập giá trị? – Rhys

+1

Bạn có chắc chắn điều kiện 'interupt == False' (thường được viết là' không interupt') là True? Nói cách khác, bạn có chắc là mã bên trong 'while-loop' đang được thực thi không? – unutbu

+0

có, tôi đã thêm một bản in vào vòng lặp while để xuất ra trọng số biến và nó hoạt động tốt. Nó có thể có một cái gì đó để làm với cách mà tôi gọi nó là 'thử: luồng.Thread (target = GetLiveWeight) .start() in liveWeight trừ: in "Lỗi: không thể bắt đầu chủ đề"' – Rhys

Các vấn đề liên quan