IndexError: list index out of range

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DeBobbes
User
Beiträge: 15
Registriert: Donnerstag 30. August 2007, 06:56

Nun habe ich noch eine neuere Version gefunden. Beider Abarbeitung des Skripts erhalte ich jedoch folgende Fehlermeldung:
R:\Projekte\NEWAL-NET\Weberslinden 07_2006\Class-VP\CHROM\Python
processing file Output_CH4.txt
Traceback (most recent call last):
File "R:\Projekte\NEWAL-NET\Weberslinden 07_2006\Class-VP\CHROM\Python\gc_berechnung.py", line 220, in <module>
print date, 'CH4'
NameError: name 'date' is not defined

Hat einer von Euch eine Hilfe, warum der Name 'date' nicht definiert ist bzw. wie ich das mache?

Das dazugehörige Skript:

http://paste.pocoo.org/show/3194/

Edit (BlackJack): Code in Paste ausgelagert
Zuletzt geändert von DeBobbes am Freitag 31. August 2007, 07:04, insgesamt 1-mal geändert.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Bei Python Source Code wärs ganz nützlich, die Codetags zu benutzen, auch wegen der Einrückung und so. ;) So liest sich das keiner durch.
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
DeBobbes
User
Beiträge: 15
Registriert: Donnerstag 30. August 2007, 06:56

beim letzten Mal hat das einwandfrei funktioniert. Ich versuche es ein weiteres Mal. Oder habe ich den Begriff Codetags falsch vestanden?
Zuletzt geändert von DeBobbes am Donnerstag 30. August 2007, 17:55, insgesamt 1-mal geändert.
BlackJack

Ich habe den Quelltext mal wieder ins Paste ausgelagert. So lange Quelltexte sollten nicht ins Forum. Der Syntax-Highlighter hier hat leider eine Macke und das laden einer Seite wird um so langsamer je mehr Code im Thread gepostet wird. Bis irgendwann gar keiner mehr Antworten kann weil der Server mit einem Timeout abbricht.
DeBobbes
User
Beiträge: 15
Registriert: Donnerstag 30. August 2007, 06:56

Sorry BlackJack, ich bin hoffnungsvoll, dass ich es eines Tages auch noch kapieren werde, dass du es bist, der den Quellcode ins Paste auslagert und dies nicht automatisch passiert..... :roll:
BlackJack

Einen `NameError` bekommt man, wenn auf ein Name zugegriffen wird, den es nicht gibt. Um `date` mit ``print`` ausgeben zu können muss man irgendwann einmal gesagt haben, was `date` überhaupt ist.

Code: Alles auswählen

In [52]: print date
---------------------------------------------------------------------------
<type 'exceptions.NameError'>    Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

<type 'exceptions.NameError'>: name 'date' is not defined

In [53]: date = 'heute'

In [54]: print date
heute
Im Skript ist nur eine Zuweisung an `date` und zwar innerhalb der Schleife, die ab Zeile 104 beginnt. `date` wird aber nur etwas zugewiesen, wenn eine der Zeilen in der Datei, die dort verarbeitet wird, auch die Zeichenkette 'Acquisition Date' enthält. Wenn nicht, dann bleibt `date` undefiniert und führt zu der Ausnahme.

Wegen dem Paste-Service: Das mit dem Boardproblem bei Quelltexten kann man als Neumitglied im Board ja nicht wissen. :-)
DeBobbes
User
Beiträge: 15
Registriert: Donnerstag 30. August 2007, 06:56

hier nun eine Beispieldatei, auf die während der Abarbeitung des Skripts in Bezug auf 'Acquisition Date' zugefriffen wird.
Dateiname 'WEBE001.txt'

[Header]
Data File Name R:\Projekte\NEWAL-NET\Weberslinden 07_2006\Class-VP\CHROM\WEBE_001.gcd
Output Date 30.08.2007
Output Time 18:12:48

[File Information]
Type Data File
Generated 12.02.2007 12:59:00
Generated by Admin
Modified 30.08.2007 18:12:48
Modified by Admin

[Sample Information]
Operator Name System
Acquisition Date 18.07.2006 19:10:03
Type Unknown
Level 1
BlackJack

Ist das auch die erste Datei, die verarbeitet wird?

Da fällt auch gleich ein Problem mit dem Programm auf: Wenn `date` erst einmal gesetzt ist, fällt es nicht auf wenn eine der im folgenden verarbeiteten Dateien dieses Datum nicht mehr enthält. Es wird dann einfach das aus der letzten Datei genommen die ein solches Datum enthalten hat. Das Programm ist also nicht besonders robust und produziert dann unter Umständen falsche Daten ohne etwas zu "sagen".
DeBobbes
User
Beiträge: 15
Registriert: Donnerstag 30. August 2007, 06:56

WEBE001.TXT ist die erste Datei in der Sequenz von Dateien, die verarbeitet werden sollen. Die Datei ist nicht vollständig sondern nur der Header der Datei dargestellt.
Aber warum kommt trotzdem die Fehlermeldung, dass 'date' nicht definiert sei???
Um die erhöhte Robustheit würde ich meich gerne erst später kümmern, wenn das erste Problem gelöst ist.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

DeBobbes hat geschrieben:Sorry BlackJack, ich bin hoffnungsvoll, dass ich es eines Tages auch noch kapieren werde, dass du es bist, der den Quellcode ins Paste auslagert und dies nicht automatisch passiert..... :roll:
Ja, und als Zeichen der Besserung kannst du jetzt schon anfangen deinen Threads _sinnvolle_ Titel zu geben. Zum Beispiel gleich diesem, indem du den ersten Post editierst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Die Frage ist nicht ob 'WEBE001.TXT' die erste Datei ist, die verarbeitet werden *soll*, sondern ob sie es auch *ist*.
DeBobbes
User
Beiträge: 15
Registriert: Donnerstag 30. August 2007, 06:56

habe herausgefunden, dass noch andere Dateien im Verzeichnis gelistet waren, die nicht dem geforderten Format entsprachen. Nach deren Löschen erhalte ich nun die folgende Fehlermeldung:

H:\Python
processing file Webe003.txt
19.07.2006 01:10:04 CH4
19.07.2006 01:10:04 N2O
Traceback (most recent call last):
File "H:\Python\gc_berechnung.py", line 277, in <module>
eichgas = Ch2_EG[eichgasePos]
IndexError: list index out of range

Welcher Index (wo definiert??) ist da out of range???

Nachfolgend daher der Inhalt der TXT-Datei, die abgearbeitet werden soll:

http://paste.pocoo.org/show/3224/
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

eichgas = Ch2_EG[eichgasePos]
IndexError: list index out of range

Welcher Index (wo definiert??) ist da out of range???


"IndexError: list index out of range" kommt immer dann, wenn man versucht, auf einen Listenindex (eine Position in der Liste) zuzugreifen, der nicht existiert.

z.b:

Code: Alles auswählen

lst = ['all', 'hail', 'discordia']
lst[23]
gibt einen fehler, weil lst nur drei elemente, nicht aber 24 hat.

In deiner Zeile sind zwei indexzugriffe. Ich schreibe die zeile mal anders auf:

Code: Alles auswählen

temp = eichgasePos[i]
eichgas = Ch2_EG[temp]
Der erste Indexzugriff würde schiefgehen, wenn i keinen index in eichgasePos trifft, der zweite, wenn das, was du aus eichgasePos rausbekommst, kein gültiger index für Ch2_EG ist.

Ich würde dir raten, die Zeile aufzuspalten, und so zu gucken, in welchem Zugriff der Fehler auftaucht.
BlackJack

Den Datenfluss in so einem grossen, unstrukturierten Quelltext mit so vielen Variablen nachzuvollziehen ist nicht so schön.

Der Ursprung liegt in der Datendatei ab Zeile 147 wo in dem 'MK'-Block ein 'MK4A' zu fehlen scheint. Ob der Fehler nun in den Daten liegt, oder im Programm weil es mit dieser Unregelmässigkeit nicht umgehen kann, muss jemand beurteilen, der Ahnung von der Anwendungsdomäne hat.

Ich weiss dass es lästig sein kann ein ordentlich strukturiertes, dokumentiertes und robustes Programm zu schreiben, wenn man nur schnell ein paar Daten auswerten möchte, aber sowie man das Programm nicht guten Gewissens nach der Verwendung löschen würde, lohnt es sich sauber zu programmieren. Solche Programme "leben" meistens länger als man denkt und müssen irgendwann doch verändert werden, oder an Änderungen in den Daten angepasst werden. Und das am Ende vielleicht sogar, wie in diesem Fall, von jemand anderem als dem ursprünglichen Autor.
DeBobbes
User
Beiträge: 15
Registriert: Donnerstag 30. August 2007, 06:56

Hi BlackJack,
Du bist super!! Obwohl ich zig male drübergeschaut habe, ist mir das noch nicht aufgefallen. danke!!! Werd es gleich nochmal porbieren, ob es funzt..
DeBobbes
User
Beiträge: 15
Registriert: Donnerstag 30. August 2007, 06:56

Wunderbar!! Das Skript funktioniert. Werde die Tipps an den Entwickler weitergeben und eine robuste Version erstellen lassen.
Lag letztendlich doch an der Dateiausgabe des Datenerfassungsprogramms, in der ein Fehler steckte (1* MK4A fehlte inder Ausgabe).
Danke an alle, die zur Lösung meines Problems beigetragen haben. Ein fettes Lob an BlackJack!!!...der mich auf den richtigen Gedanken gebracht hat.
Antworten