CGI-Skript: string index out of range

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Hallo.

Da ich das Kapitel über CGI-Programmierung in meinem Python-Buch bisher nicht angerührt habe, dachte ich mir, dass es mal Zeit wird.

Bisher hat auch alles wunderbar geklappt und in meinem Übermut kam ich noch auf die Idee mal mit anydbm eine Datenbank mit ein zu binden.

Und siehe da, das erste Problem taucht auf.

Über ein Eingabeformular werden Daten in der Datenbank gespeichert. Was auch funktioniert. Ein weiteres Skript fragt die Datenbank ab und überprüft die dortigen Einträge.

Code: Alles auswählen

for key in db.keys():
    line = db[key].split('|')
    for row in line:
        if row[7] == 'n':
Das ist der Abschnitt, der den im Titel genannten Fehler ausgibt.

Wenn ich das Skript aber direkt in der Konsole abarbeite (ohne die print-Anweisungen), dann funktioniert alles.

Wie kann das sein? An den Funktionen ändert sich doch nichts. Oder doch?
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Wie der Fehler entsteht liegt allein daran, was in db vorhanden ist. Deswegen ist es ja auch nicht dasselbe, das Script in der Konsole auszuführen. Bei irgendeinem Eintrag wird dann das row[7] eine Fehler schießen, da row gar nicht 8 Zeichen lang ist. Das hat mit der Funktion nix zu tun, sondern mit den Daten mit denen sie gefüttert wird.
Gast

Die Daten, die in die DB geschrieben werden, bestehen immer aus 8 Einträgen der Form

Eintrag1|Eintrag2|Eintrag3|Eintrag4|Eintrag5|Eintrag6|Eintrag7|n

Wobei Eintrag7 eventuell als '' gespeichert wird, aber trotz dem existiert.

Bisher sind nur zwei Datensätze in der DB vorhanden. Wenn ich aus der Konsole über beide ... laufen lasse, bekomme ich immer 8.

Code: Alles auswählen

liste = db[key].split('|')
len(liste)
Also behaupte ich jetzt mal ganz frech (kann mich auch irren), dass es nicht an der DB liegt. Oder?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi,

Code: Alles auswählen

for key in db.keys(): # über die Zeilen iterieren
    line = db[key].split('|')
    for row in line: # über die Einträge iterieren
        if row[7] == 'n': # ? 
überleg mal was row dann ist. Ich denke das if row[7] == 'n' ist wohl in der falschen Zeile. Und es müsste heißen if line[7] == 'n':


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
bmh1980
gelöscht
Beiträge: 60
Registriert: Montag 26. Januar 2004, 17:13
Kontaktdaten:

Genau das wollte ich gerade schreiben.

Ich Rindviech habe doch tatsächlich die einzelnen String aus der Liste als Liste behandeln wollen. :roll:

Was sagt uns das? Schreibe keine Skripte, wenn du am flirten bist. :wink:

Und jetzt zieh ich mich mit hochrotem Kopf, ganz leise in eine Ecke zurück. :oops: *schäm*

Marcus
Antworten