2016-05-01 3 views
0

Я пытаюсь сравнить определенные значения с временами разброса в CSV-файле. Ex: iam ищет первое значение в 27 байтов и сохраняет свое время. Затем второе значение 27 и время отличается от первого, а затем сохраняет свое время, затем третье и т. д. Проблема заключается в том, что я пытаюсь сэкономить время на переменную, чтобы сравнить ее со вторым значением, которое она мне дает:UnboundLocalError: локальная переменная 'T3', на которую ссылаются перед назначением "

UnboundLocalError: локальная переменная 'T3' Перед назначением "

import csv 
import os 
import glob 


class dot(object): 
    Time="" 
    Payload="" 
    Timediff="" 

global T1 
global T2 
global T3 
global T4 

def searchfunc(): 
    path = '/Users/mohamedshaaban/Downloads/tes/Camera' 
    for infile in glob.glob(os.path.join(path, '*csv')): 
     with open(infile) as inf: 
     reader = csv.reader(inf) 
     partname = partsize = None 
     partname2 = partsize2 = None 
     partname3 = partsize3 = None 
     partname4 = partsize4 = None 
     partname5 = partsize5 = None 
     camera = dot() 
     camera.Payload1='30 bytes' 
     camera.Payload2='27 bytes' 
     camera.Payload3='17 bytes' 
     camera.Payload4='5 bytes' 
     camera.Payload5='6 bytes' 

     for row in reader: 
      if camera.Payload1 in row[2] and partname is None: 
       x = row[2] 
       partname = x[0:-1] 
       T1 = float(row[4]) 
      if camera.Payload2 in row[2] and partname2 is None: 
       x2 = row[2] 
       partname2 = x2[0:-1] 
       T2 = float(row[4]) 
       #print partname2 
       #print Time2 
      if camera.Payload2 in row[2] and partname3 is None: 
       if float(row[4]) != T2: 
        T3 = float(row[4]) 
        x3 = row[2] 
        partname4 = x3[0:-1] 
        print partname3 
      if camera.Payload2 in row[2] and partname4 is None: 
       if float(row[4]) != T3: 
        T4 = float(row[4]) 
        x4 = row[2] 
        partname4 = x4[0:-1] 
        print partname3 
        print Time5    




searchfunc() 

ответ

0

Вы должны объявить ВАР как глобальной внутри вашей функции. В противном случае python предполагает, что он находится только в локальной области.

Попробуйте добавить это под объявлением функции (оставляя ВАР объявленным в внешней области, а также:

def searchfunc(): 
    global T1, T2, T3, T4 
+0

Это дает мне эту ошибку: NameError: глобальное имя «T3» не определено –

+0

Вам по-прежнему необходимо определить их вне функции. См. Ответ Rushy Panchal выше. – tknickman

1

Вы используете глобалам неправильно - модификатор global используется внутри функции, чтобы указать, что переменные имеют глобальные разрешения на чтение/записи Однако T3 никогда не устанавливаются на определенных путях выполнения, и поэтому вы получите эту ошибку

вы хотите, чтобы ваши настройки, чтобы быть что-то в виде:..

T1 = None # or your preferred initial value 
T2 = None 
T3 = None 
T4 = None 

def searchfunc(): 
    global T1, T2, T3, T4 

Обратите внимание, однако, что вам следует избегать использования глобальных переменных, когда сможете. Глобалы по своей сути являются плохим стилем программирования и практикой. Есть некоторые фантастические ссылки в this answer to "Why are global variables evil?".

+0

Спасибо Rushy, что он исправил ошибку, но не работал, как я хотел. выход в настоящее время не является: 2,71373925 Ни 2,776665375 None 2,776665375 .................... то, что я хочу, это полезная нагрузка и время только для него. Например: 27 байт (3C 1F 6B 04 D6 71 9F BD CF 7B 27 38 45 A5 8F 53 B4 1D 0C 07 6A FB AF 4D 0B 46 BF) 2.207133125 –