Frage zum except in code

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
frannek
User
Beiträge: 33
Registriert: Dienstag 28. Januar 2014, 12:17

Hallo Zusammen,

ich habe ein kleines Problem mit meinem Code. ich wollte nun except mit einbauen aber leider sehe ich den Wald vor lauter Zahlen nicht mehr. ich bekomme jedesmal Fehlermeldungen:

IndentationError: unexpected indent
SyntaxError: invalid syntax
IndentationError: unindent does not match any outer indentation level


Joa, soweit dazu. Mal hat es was mit der Position zu tun und mal eben mit der Einrückung. Und genau da hab ich meine Problematik. Ich arbeite mit normalem Editor und werde den Fehler sicherlich heute nicht mehr finden - es sei, es kann mir kurz wer helfen:

Code: Alles auswählen


i = 1




while i:
  i = 1
  lcd.lcd_clear()
  lcd.lcd_display_string("Anzeige 1", 1)
  lcd.lcd_display_string("Zeile 2", 2)
  sleep (4)


  s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  s.connect(("gmail.com",80))
  ip = (s.getsockname()[0])
  s.close()

  lcd.lcd_clear()
  lcd.lcd_display_string("Public IP:", 1)
  lcd.lcd_display_string(ip , 2)
  sleep (10)

  date = datetime.now().strftime('%d%b%y-%H:%M:%S')
  lcd.lcd_clear()
  lcd.lcd_display_string("Zeitstempel:", 1)
  lcd.lcd_display_string(date, 2)

  sleep(4)

  lcd.lcd_clear()
  lcd.lcd_display_string("System uptime:", 1)
  lcd.lcd_display_string(uptime(), 2)
  sleep (8)
  lcd.lcd_clear()
  i += 1
  
  while i <= 59:
     date = datetime.now().strftime('%H:%M:%S')
     lcd.lcd_display_string("Time UTC:", 1)
     lcd.lcd_display_string(date, 2)
       except IOError as ex:
         print "test" 
     i += 1
     sleep (1)
 

  #lcd.lcd_backlight_off(1)
  sleep(2)








Wo baue ich jetzt also das except ein? Ich würde gerne jeden Fehler abfangen. von daher sollte nur except ausreichen, oder? Es geht ja nur um eine LCD Anzeige.

Würde mich freuen, wenn mir einer helfen kann (Nein, keine Hausaufgabenhilfe ;-))

Gruß

Frannek


PS: ich hab in diesem Beispiel schon ein except drin (was natürlich nicht geht).
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@frannek: zur Exception-Behandlung braucht man immer einen try-Block, der angibt, dass man gerne Fehler, die in diesem Block auftreten, behandeln möchte und beliebig viele except-Blöcke, in denen einzelne Fehlertypen behandelt werden. Block ist immer etwas, das einheitlich eingerückt ist, und zwar mit 4 Leerzeichen pro Ebene und nicht mal mit 2 und mal mit 3. Einen try-Block hast Du überhaupt nicht.

Bei der äußere while-Schleife wird i niemals 0 also hast Du in Wirklichkeit eine Endlos-Schleife, solltest die also auch als solche schreiben. Vor der öffnenden Klammer eines Funktionsaufrufs steht kein Leerzeichen.
Die zweite while-Schleife ist eher eine for-Schleife, "for i in range(2,60):"
frannek
User
Beiträge: 33
Registriert: Dienstag 28. Januar 2014, 12:17

hehe.. Sirius - mal wieder ;-)

vielen Dank und logisch. Das mit try war mir nicht bekannt. Aber dann erklärt es natürlich einiges.
Ja, es ist eine Endlosschleife mit einer kleinen Schleife für die Uhrzeit - Quasi als Lückenfüller zwischen zwei durchläufen. Ich hatte keine andere Idee, wie ich eine Uhr mit Sekundenanzeige auf LCD bringen könnte.. deswegen die Schleife in der Schleife.

Einrücken war noch nie so meine Stärke ;-) Kann mir denn keine mal ein Programm empfehlen, der die ganze Sach etwas einfacher und übersichtlicher macht? Ein windows Editor ist jetzt nicht gerade das Beste (bzw WinSCP)

Vielen Dank, ich sehe die Bäume im Wald wieder ;-)
BlackJack

@frannek: Es gibt Unmengen an Editoren die sich fürs Programmieren eignen.
frannek
User
Beiträge: 33
Registriert: Dienstag 28. Januar 2014, 12:17

@BlackJack

durchaus. Aber es gibt ja auch durchaus Erfahrungswerte und vielleich aus dem Stehgreif ein Editor, der dir bzw euch gerade einfällt. Nur so als Anhaltspunkt. Dass es einige gibt, ist klar - aber es gibt eben auch einiges an Schrotte ;-)

So, ich habs mal so verbessert und siehe da : except funktioniert.

Code: Alles auswählen

i = 1
while i:
    try:
        i = 1
        lcd.lcd_clear()
        lcd.lcd_display_string("Anzeige 1", 1)
        lcd.lcd_display_string("Zeile 2", 2)
        sleep (4)


        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("gmail.com",80))
        ip = (s.getsockname()[0])
        s.close()

        lcd.lcd_clear()
        lcd.lcd_display_string("Public IP:", 1)
        lcd.lcd_display_string(ip , 2)
        sleep (10)

        date = datetime.now().strftime('%d%b%y-%H:%M:%S')
        lcd.lcd_clear()
        lcd.lcd_display_string("Time on Logger:", 1)
        lcd.lcd_display_string(date, 2)

        sleep(4)

        lcd.lcd_clear()
        lcd.lcd_display_string("System uptime:", 1)
        lcd.lcd_display_string(uptime(), 2)
        sleep (8)
        lcd.lcd_clear()
        i += 1
  
        for i in range(2,60):
            date = datetime.now().strftime('%H:%M:%S')
            lcd.lcd_display_string("Time UTC:", 1)
            lcd.lcd_display_string(date, 2)
            i += 1
            sleep (1)
 

        #lcd.lcd_backlight_off(1)
        sleep(2)
    except IOError:
        print "IO Error"


Fazit: In einer Schleife kann EXCEPT nur funktionieren, wenn man TRY: hat?


Vielen Dank!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

try except gehören immer zusammen unabhängig davon ob du in einer Schleife bist.
BlackJack

@frannek: Ein Editor (oder eine IDE) ist tägliches Werkzeug eines jeden Programmierers, also hat auch jeder aus dem Stehgreif einen sehr guten Editor, den er empfehlen kann. Das Problem ist also das Du fünf Programmierer nach einer Editorempfehlung fragen kannst und daraufhin 10 mögliche Kandidaten vorgeschlagen bekommst, die alle gut sind. Oder zumindest von den jeweiligen Programmierern für gut befunden werden. Es gibt hier im Forum ein ziemlich langes Thema zu Editoren, lies Dir das mal durch. Es bleibt am Ende selbst auszuprobieren welcher Editor *Dir* am ehesten entgegen kommt.
frannek
User
Beiträge: 33
Registriert: Dienstag 28. Januar 2014, 12:17

Ich danke vielmals für die Hilfe und die Informationen.

Wünsche euch allen noch einen schönen Tag und bis zum nächsten mal:-)
Antworten