2016-05-01 12 views
0

CSVファイルで特定の値とdiff時間を比較しようとしています。例:最初の27バイトの値を検索して時間を保存します。最初のものとは違って、次に3番目の時間を節約します。問題は、変数に時間を節約して、このエラーを2番目の同じ値と比較するときです。UnboundLocalError:割り当て前にローカル変数 'T3'が参照されています。 "

UnboundLocalError:代入前 "

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はローカルスコープ内にあるとみなします。同様に、外側のスコープで宣言されたVARSを残して、あなたの関数宣言の下にこれを追加すること

てみてください(:

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 なし 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 –

関連する問題