2013-06-14 4 views
1

Следуя моим предыдущим question. Мне было рекомендовано создать отдельную библиотеку python, а затем импортировать ее.UnboundLocalError: локальная переменная 'W', на которую ссылается перед присвоением

Прочитав немного больше о Stackoverflow, я понял, что лучший способ - write methods, и я занялся этим путем.

def USB(port): 
     activateme = serial.Serial(port,115200) 
     #print "starting to monitor" 
     for line in activateme: 
       #print line 
       return line 

def USBprocess(line): 
     if line.startswith('#d'): 
       fields = line.split(',') 
       if len(fields) > 5: 
         W = fields[1] 
         V = fields[2] 
         A = fields[3] 
       print "monitoring" 
     return W,V,A 

op = USB(port) 
w,v,a = USBprocess(op) 

и я получаю ошибку:

UnboundLocalError: local variable 'W' referenced before assignment 

, что это такое, что я делаю неправильно?

+1

Ошибка будет выбрана, если условие if является ложным, потому что тогда не будет переменной 'W' для возврата –

+1

Очевидно, что линия не strat с' # d'. Как вы думаете, что должно произойти в этом случае? случай? –

+2

Кстати, вы можете делать 'W, V, A = fields [1: 4]' или просто 'возвращать поля [1: 4]' – Elazar

ответ

6

Вы должны указать значения для W, V, A в начале функции, если первое условие if не является True. Что-то вроде этого, возможно (изменения значений по умолчанию подходит для вашей проблемы):

def USBprocess(line): 
    W, V, A = '0', '0', '0' 
    if line.startswith('#d'): 
     # etc. 
+3

например 'W = A = V = None' – oleg

0

В случае это выражение не верно:

line.startswith('#d') 

переменных W, V и A не будут инициализированы в вашем USBprocess функция, поэтому return не получится.

Исправьте его, инициализируя все локальные переменные перед оператором if.