2017-08-17 2 views
0

Ich versuche, mein Programm eingehende Protokolldateien von einem externen Programm zu lesen. Das Programm führt eine Funktion aus und ich plane, dass es alle 10 Sekunden wiederholt wird. Das Programm läuft für ein paar Iterationen gut und gibt mir dann 'ValueError: max() arg ist eine leere Sequenz', ich habe versucht, eine Fehler Ausnahme zu übergeben, aber mein Verständnis fehlt und als solche nicht richtig implementiert haben.ValueError: max() arg ist eine leere Sequenz nur in bestimmten Schleifen

Die eingehenden Protokolldateien sind keine einheitliche Matrix und sie können sich in der Größe ändern, daher finde ich die maximale Länge und erstelle eine Matrix aus Nullen, um die leeren Ergebnisse mit Nullen zu füllen, um Manipulationen zu ermöglichen.

CheckFile = 0 
CurrentFile = 0 

def MyFunction(): 
    from datetime import datetime 
    global CheckFile 
    global CurrentFile 
    month = datetime.now().strftime('%B') 
    path = os.path.join(r'C:\MyFilePath',month) #I add month because the files change location each month 
    os.chdir(path) 

    for i in os.listdir(path): 
     if os.path.isfile(os.path.join(path,i)) and 'StartOfFileName$}' in i: 
      filelist = [i] 

    Filehandle = filelist[0]  
    strFile = str(File_3min) 
    CurrentFile = strFile[14:44] 
    Current = CurrentFile 

    if Current != CheckFile: # This statement checks to make sure that the log files are always new 

     with open(Filehandle ,'r') as Filehandle : 
      lines = [line.strip().split(',') for line in Filehandle ] 

     max_len = max(len(line) for line in lines) 
     my_array = np.zeros([len(lines),max_len]) 

     for i, line in enumerate(lines): 
      my_array[i, :len(line)] = line 

    else: 
     return 

schedule.every(10).seconds.do(MyFunction) 


while 1: 
    schedule.run_pending() 
    time.sleep(1) 

Der Fehler ergibt sich aus der Zeile: max_len = max (len (Linie) für Linie in Linien)

+2

Die Datei, die Sie öffnen, ist leer, also haben Sie 'Linien == []' ... nicht die Verarbeitung, wenn das der Fall ist oder was auch immer passt in wie Sie damit umgehen wollen ... Oder vielleicht wenn Sie verwenden 3,4+, Sie können 'default = 0 'in' max' übergeben und dann wird der Rest Ihres Codes ausgeführt, aber wird effektiv ein No-Op sein. Was auch immer Suiten/macht am meisten Sinn. –

+0

Die Dateien haben alle Daten in ihnen, ich habe alle sofort nach dem Fehler überprüft. Danke, ich benutze Python 3.6, so überlasse ich Standard als 0 –

+0

Bitte werfen Sie einen Blick auf [mcve]. Derzeit ist Ihr Beispiel nicht minimal und nicht reproduzierbar und es fehlt das erwartete Verhalten. Das macht es sehr schwierig, eine nützliche Antwort auf Ihre Frage zu geben. – MSeifert

Antwort

0

Sie haben eine leere Liste lines

für einfache debug, versuchen hinzufügen print (len(lines))

print (len(lines)) 
max_len = max(len(line) for line in lines) 
Verwandte Themen