Else if Syntax

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
redbomberle
User
Beiträge: 19
Registriert: Dienstag 21. Oktober 2008, 18:28

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:

Code: Alles auswählen

   elif(c==5):
      ^
SyntaxError: invalid syntax
Und ich verstehe einfach nicht warum.
Redprince
User
Beiträge: 128
Registriert: Freitag 22. Oktober 2004, 09:22
Wohnort: Salzgitter
Kontaktdaten:

Weil da eine Klammer fehlt:

Code: Alles auswählen

lgg.setWindowSizeDetection((line.strip(" \t\r\n;"))
I am not part of the allesburner. I am the [url=http://allesburner.de]allesburner[/url].
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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 ... :wink:

Edit: Redprince hat es inzwischen auch bemerkt und seinen Beitrag geändert ...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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)
redbomberle
User
Beiträge: 19
Registriert: Dienstag 21. Oktober 2008, 18:28

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 :-)
redbomberle
User
Beiträge: 19
Registriert: Dienstag 21. Oktober 2008, 18:28

jupp hat funktioniert!
vielen Dank :)
Antworten