Unglaublicher Indexfehler

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
Apotekarnes
User
Beiträge: 18
Registriert: Mittwoch 21. September 2011, 10:02

Liebe Pythonfreunde,

ich habe einen äußerst merkwürdigen Indexfehler erhalten und muss diesen schnellstmöglich beseitigen.

Der "fehlerhafte" Codeteil:

Code: Alles auswählen

currlength = poslist[len(poslist)-2] - poslist[lastclusterstart] + 1
numberofsplitpoints = currlength/maxclusterdiameter
if currlength%maxclusterdiameter < (maxclusterdiameter/10): # Note tolerance
    numberofsplitpoints -= 1
if numberofsplitpoints >= 1:
    fragmentsize = currlength/(numberofsplitpoints+1)
    targetpos = poslist[lastclusterstart] + fragmentsize

IndexError: list index out of range

Der IndexError wird für die letzte (!) Zeile gemeldet (unterstrichener Listenzugriff).
Das Merkwürdige ist aber, dass er die 1. Zeile anscheinend durchläuft, ohne bei demselben Listenzugriff abzubrechen. Wie kann das sein?

Erschwerend kommt hinzu, dass der Fehler nur beim Durchlauf eines riesigen Datensatzes nach ca. 1 Woche Bearbeitungszeit auftritt. In den Testdatensätzen ist er nicht reproduzierbar.

Was ist das für ein seltsames Phänomen?
Alle Theorien sind willkommen!!

Viele Grüße,
Apotekarnes
Zuletzt geändert von Apotekarnes am Mittwoch 11. Juli 2012, 12:07, insgesamt 2-mal geändert.
deets

Koenntest du das mal bitte mit properen python-code-tags posten, ohne komische BB-codes dazwischen? So ist das etwas unuebersichlich.
BlackJack

@Apotekarnes: Die Ausnahme ist in der Tat unglaublich. Es sei denn das ist nicht der ganze Code der da abläuft — entweder weil Du nicht den tatsächlichen Quelltext zeigst, oder weil zum Beispiel Threads laufen und die Daten verändern — oder die Annahme, dass das Grunddatentypen mit dem üblichen Verhalten sind, ist falsch.
Apotekarnes
User
Beiträge: 18
Registriert: Mittwoch 21. September 2011, 10:02

Habe die Python-Code-Tags eingesetzt und die Unterstreichung entfernt.

Ja, das ist in der Tat nicht der gesamte Code. Allerdings läuft das alles in nur einem Thread. Die Datentypen sind Listen, Integers, Strings - alles unverändert.

Ist es generell möglich, dass Python den Fehler beim 1. Listenzugriff ignoriert und erst beim 2. stoppt?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ohne weiteren Code wird es wohl nicht gehen. Kopiere am besten mal dein Modul und streiche es so weit zusammen, dass du ein minimales LAUFFÄHIGES Beispiel hast bei dem der Fehler noch auftritt. Wenn sich der Fehler dabei nicht schon von alleine klärt, kannst du das Beispiel ja hier posten.

Nützlich ist vielleicht noch der gesamte Traceback der Fehlermeldung. Hast du vielleicht eine Zeile, welche noch genau so aussieht?
Apotekarnes hat geschrieben:Ist es generell möglich, dass Python den Fehler beim 1. Listenzugriff ignoriert und erst beim 2. stoppt?
Das wäre vollkommen unsinniges Verhalten, daher passiert das sicher nicht ^^
Das Leben ist wie ein Tennisball.
Benutzeravatar
Kebap
User
Beiträge: 695
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

EyDu hat geschrieben:
Apotekarnes hat geschrieben:Ist es generell möglich, dass Python den Fehler beim 1. Listenzugriff ignoriert und erst beim 2. stoppt?
Das wäre vollkommen unsinniges Verhalten, daher passiert das sicher nicht ^^
Ja, das passiert üblicherweise, wenn zwischen 1. und 2. Zugriff noch etwas anderes wichtiges geschah
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Kebap hat geschrieben:Ja, das passiert üblicherweise, wenn zwischen 1. und 2. Zugriff noch etwas anderes wichtiges geschah
Davon gehen hier ja alles aus, deshalb braucht es mehr Code.
Das Leben ist wie ein Tennisball.
Antworten