2016-07-01 5 views
1

Ich analysiere # data1 und # data2 aus einer Tonne von Dateien. Einige Dateien haben nicht beide aber so, wenn ich data1 zurückkehren, Daten2 es ergibt sich:Wie gibt man nur die Werte zurück, die existieren?

UnboundLocalError: local variable 'data2' referenced before assignment 

ich einige andere Fragen haben gesucht und ich dachte, so etwas wie try/except vielversprechend aussah, aber ich will es nicht einen Fehler zu werfen, wenn einer der Werte nicht existiert.

Ich habe verschiedene if-Anweisungen ausprobiert, bekomme aber den gleichen UboundLocalError.

if data1 and data2: 
    return data1, data2 

Gibt es eine einfache Möglichkeit zu überprüfen, dass der Wert vorhanden ist, bevor Sie versuchen, es zurückzugeben?

data1, data2 = parse_file(filename) 

def parse_file(sample): 
    for line in open(sample, 'r'): 
     if line.startswith('#data1'): 
      #Clean up the value 
      data1 = line.strip().split('=')[-1] 

     elif line.startswith('#data2'): 
      #Clean up the value 
      data2 = line.strip().split('=')[-1] 

     #Go to next line if it doesn't have either 
     else: continue 

    return data1, data2 

Antwort

3

data1 und data2 definiert sind nur je nachdem, was mit Ihrer Linie beginnt. Wenn Ihre Zeile nie mit '#data2' gestartet wurde, wurde data2 nie definiert.

Sie können sie nur initialisieren sowohl None s zu Ihren Fehlern loszuwerden:

def parse_file(sample): 
    for line in open(sample, 'r'): 
     data1, data2 = None, None # Initialize them here if you want them reset for every iteration 
     # do stuff 
Verwandte Themen