Seite 1 von 1
Else if Syntax
Verfasst: Freitag 9. Oktober 2009, 13:11
von redbomberle
Hi zusammen, bin gerade an einem else if statement, bzw. an der Python syntax am verzweifeln:
Code: Alles auswählen
for line in data_file:
c=+1;
if(c==3):
lgg.setWindowSizeDetection((line.strip(" \t\r\n;"))
elif(c==5):
lgg.setOffsetDetection((line.strip(" \t\r\n;"))
elif(c==7):
lgg.setWindowSizeSpike((line.strip(" \t\r\n;"))
else:
print (line.strip(" \t\r\n;");
data_file.close()
bei dem zweiten elif statement kommt bei mir folgender Fehler:
Und ich verstehe einfach nicht warum.
Verfasst: Freitag 9. Oktober 2009, 13:13
von Redprince
Weil da eine Klammer fehlt:
Verfasst: Freitag 9. Oktober 2009, 13:15
von numerix
Redprince hat geschrieben:Weil du gleichmäßig einrücken musst. Mal geschätzte 100 Leerzeichen nehmen und dann wieder nur vier klappt natürlich nicht.
Der auslösende Fehler ist aber ein anderer: In Zeile 5 werden drei Klammern geöffnet und 2 geschlossen ...
Edit: Redprince hat es inzwischen auch bemerkt und seinen Beitrag geändert ...
Re: Else if Syntax
Verfasst: Freitag 9. Oktober 2009, 13:31
von Hyperion
redbomberle hat geschrieben:Hi zusammen, bin gerade an einem else if statement, bzw. an der Python syntax am verzweifeln:
Deine Einrückung ist ein wenig komisch - laut PEP8 sind 4 Spaces Standard. Außerdem braucht es keine Klammern nach if / elif:
So sieht es besser aus:
Code: Alles auswählen
for line in data_file:
c=+1;
if c==3:
lgg.setWindowSizeDetection(line.strip(" \t\r\n;"))
elif c==5:
lgg.setOffsetDetection(line.strip("\t\r\n;"))
elif c==7:
lgg.setWindowSizeSpike(line.strip("\t\r\n;"))
else:
print line.strip(" \t\r\n;")
data_file.close()
Ich würde es aber eher so schreiben (ungetestet):
Code: Alles auswählen
mapping = {
3: lgg.setWindowSizeDetection
5: lgg.setOffsetDetection
7: lgg.setWindowSizeSpike
}
for index, line in enumerate(data_file):
try:
mapping[index](line.strip("\t\r\n;"))
except IndexError, e:
print line.strip(" \t\r\n;")
Man kann sich natürlich streiten, ob das schon bei drei Verzweigungen sinnvoll ist. Aber wenn es ggf. noch mehr werden, kann man so einfacher neue Funktionen einbauen.
Auf jeden Fall würde ich das data_file.close() nicht an dieser Stelle aufrufen. Entweder man öffnet die Datei mit dem with-Statement und spart sich das close(), oder aber man baut sich ein try...except...finally Kontrsukt, wo man im finally-Zweig das close() aufruft.
Nutzt Du Python 3.x? Dann ist print natürlich wieder eine Funktion. (Wobei man def. kein Semikolon setzen darf danach)
Verfasst: Freitag 9. Oktober 2009, 13:55
von redbomberle
also erst einmal vielen Dank euch allen.
Ich komme aus der Java-Welt und benutze eclipse als editor. Ein wirklich einfacher Fehler, nur nervig da ich aufgrund der compiler-warnung wo völlig falsches gesucht habe.
Das mit dem mapping werde ich realisieren, da das ganze ein Log-File darstellt, in dem viele Parameter gespeichert werden. Also wird noch vieles dazu kommen.
ich verwende (noch) python 2.6.
Verfasst: Freitag 9. Oktober 2009, 14:00
von Hyperion
redbomberle hat geschrieben:
Ich komme aus der Java-Welt und benutze eclipse als editor.
Wie sieht denn der Quellcode aus, wenn Du SHIFT-STRG-F drückst? Wenn das Python Plugin gut ist, sollte es die Einrückungen entsprechend PEP8 vornehmen

Verfasst: Freitag 9. Oktober 2009, 14:04
von redbomberle
jupp hat funktioniert!
vielen Dank
