2017-11-21 21 views
0

親愛なるStackflowコミュニティ!UnboundLocalError:割り当て前に参照されるローカル変数 'Control_Type'

私はこの質問が毎週来るのを知っていますが、私の問題の正しい解決策を見つけることができませんでした。

私は未処理のファイルを読み取る関数を作成しようとしています。

コードは次のようになります。

def read_raw(file_name): 
    f = open(file_name, 'r') 
    lines = f.readlines() 
    header = lines[9].rstrip().split('\t') 
    dicts = {} 

    for x,y in enumerate(header): 
     if y == 'FeatureNum' 
      num_id = x 
     elif y == 'ProbeName': 
      probe_name = x 
     elif y == 'gProcessedSignal': 
      signal = x 
     elif y == 'ControlType': 
      Control_Type = x 

    for l in lines[10:]: 
     l = l.rstrip().split('\t') 
     if l[control_type] == '0': 
      dicts[l[num_id]] = {'FeatureNum': l[num_id],\ 
           'ProbeName': l[probe_name],\ 
           'gProcessedSignal': l[signal]} 
    df = pd.DataFrame.from_dict(dicts) 
    df['Signal'].astype(float) 
    return df 

私はあなたが生のように見えると私はそれから取り出したいか想像できると思います!

今の事は、私のディレクトリからすべてのファイルを呼び出す機能を呼び出すと、リストにそれをすべて入れて、このようなものができ、私がしたい、次のとおりです。

path = os.getcwd() 
os.chdir(path) 
all_files = glob.glob(os.path.join(path, '*.txt')) 

array_list = [] 
for files in all_files: 
    arrays = read_raw(files) 
    array_list.append(arrays) 

そして、私はこれを得ました:

if l[Control_Type] == '0': 
UnboundLocalError: local variable 'Control_Type' referenced before assignment 

この問題を解決する方法はありますか?私も辞書の前にcontrol_typeのグローバルを置こうとしましたが、それもうまくいきませんでした。

私はそれがあなたの機能に混乱する可能性があることを読んだので、しかし、それはグローバルなしでそれを持っていることが望ましいでしょう。

ありがとう、オーストリアで素敵な夜をお祈りしています。

+0

こんにちはPM 2Ring!私はそれをより完全にどのように説明すべきですか?何をもっと説明してほしいですか?それは私のインデントを修正するのに役立ちます:D –

+0

私は実際に少しコードを変更し、それを小さくしましたが、私はすぐにそれを変更します。 Thx PM 2Ring –

+0

これは正しいコードになりました!私はそれほど実際には短縮された名前だけを変更しなかった。機能は動作します。それがあなたを助けている場合、私は自分のコードを書いてAgilent Microarrayの生ファイルを読み込もうとしています:D –

答えて

0

スペルは本当ですか? 'C'は 'c'ではない?そして 'T'は 't'ではない? Control_Type

コード内にはcontrol_typeが表示され、エラーではControl_Typeが表示されます。

+0

はいveri_pudcha_coder 'control_type'は 'Control_Type'になっていました:DIさんに感謝しました:D –

+0

この問題は非常によく起こる私はこの種の問題の解決策を見つけることができませんでした。ほとんどの変数は関数から外れており、関数内で変数globalに書き込むことで解決しようとしています –

+0

あなたのコードでは、Control_Typeは条件が満たされたときにのみ初期化されます。この条件が満たされない場合、このエラーが発生します。したがって、変数をループ/条件外に宣言してください –

関連する問題