Liebe Pythonfreunde, ich habe schon wieder mal ein porblem. Ich kann mir aber kein Reim drafu machen. In meinem Skript [1] soll aus einer TXT Datei daten über Telnet an Teamspeak gesendet werden. Leider bekomme ich immer die Fehlermeldung: Traceback (most recent call last): File "news.py", line 39, in <module> tel.write('msg @' + title[i]) IndexError: list index out of range Aber manchmal wird nur ein Teil der Daten gesendet. Viele Grüße Christoph Heer [1] http://ubuntuusers.de/paste/17274/
Hallo Christoph! Am 01.11.07 schrieb Christoph Heer <christoph.heer@googlemail.com>:
File "news.py", line 39, in <module> tel.write('msg @' + title[i]) IndexError: list index out of range
Der Fehler dürfte beim wiederholungen = len(title) + int('2') liegen. wiederholungen = len(title) - 1 sollte das Problem beheben. Und ich frage mich, wieso Du int("2") genommen hast. Liebe Grüße Martin
[ "Christoph Heer" <christoph.heer@googlemail.com> ]
Liebe Pythonfreunde, ich habe schon wieder mal ein porblem. Ich kann mir aber kein Reim drafu machen. In meinem Skript [1] soll aus einer TXT Datei daten über Telnet an Teamspeak gesendet werden. Leider bekomme ich immer die Fehlermeldung:
Traceback (most recent call last): File "news.py", line 39, in <module> tel.write('msg @' + title[i]) IndexError: list index out of range
Ja, was erwartest du? Du berechnest "wiederholungen" als "len(title) + int('2')". Mal abgesehen davon, dass int('2') schwachsinnig ist, ist ein IndexError nur die logische Konsequenz, wenn du den Wert von "wiederholungen" als Basis für die Iteration über "title" nimmst. Ein Beispiel: [lunar@nargond]-[18:22:28] >> /home/lunar [1]--> title = ['foo\n', 'bar\n'] [lunar@nargond]-[18:22:31] >> /home/lunar [2]--> len title -----> len(title) Out[2]: 2 [lunar@nargond]-[18:22:35] >> /home/lunar [3]--> wiederholungen = len(title) + 2 [lunar@nargond]-[18:22:42] >> /home/lunar [4]--> wiederholungen Out[4]: 4 [lunar@nargond]-[18:22:44] >> /home/lunar [5]--> for i in range(1, wiederholungen): ...: print i, ('Index existiert' if i < len(title) else 'Index existiert nicht') ...: 1 Index existiert 2 Index existiert nicht 3 Index existiert nicht Das ist nur logisch, wenn man versucht, über 2 Element mehr zu iterieren, als eigentlich in der Liste enthalten sind. Man kann ja auch nicht 4 Äpfel aus einem Korb nehmen, in dem nur 2 drin sind, oder? Btw, dein Code ist - nett gesagt - suboptimal. int("2") habe ich bereits angesprochen. Erwähnenswert wäre noch, dass man range _nie_ zum Iterieren nimmt. Wenn man Elemente einer Liste erhalten will, itiert man direkt über die Liste, benötigt man den Zähler zusätzlich, so gibt es enumerate. Wenn man schon unbedingt die hässliche Variante mit Index nehmen will, dann doch bitte per xrange, was wenigstens das Anlegen der Liste erspart. Auch würde ich rf.readlines weglassen und stattdessen ebenfalls direkt über das Dateiobjekt iterieren, was eine weitere Listen-Erzeugung einsparen würde. Sollte das selbe tun, allerdings ungetestet: http://paste.pocoo.org/show/8561/ -- Freiheit ist immer die Freiheit der Andersdenkenden. (Rosa Luxemburg)
participants (3)
-
Christoph Heer -
Martin Licht -
Sebastian Wiesner