Inhalt von Entrys prüfen

Fragen zu Tkinter.
Antworten
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Jan

Besten Dank für deine Verfeinerungsvorschläge.

Ich habe mich leider noch nicht tiefgründiger
mit try: except: beschäftigt aber dies könnte der
Anfang sein.

Was heisst grosszügig in diesem Falle genau? Es ist
mir klar das bei meine Funktionen wo ich diesen try's
eingestezt habe hauptsächlich vom os abhängige Aktionen
durchgeführt werden. Das bei einem fehlschlagen der Aktion
ziemlich sicher ein os.error auslöst wird. Was passiert
wenn bei deinem 1. Vorschlag kein OSERROR ausgelöst wird
sondern ein anderer? Ist try nur auf OSERROS scharf?

Bei deinem 2.Vorschlag. Was meinst du genau mit
"Exception nach oben weiterreichen"? Wie behandels du
die nach oben gereichte Exception genau. Ich möchte zum
Beispiel eine Meldung von dieser nach oben gereichte
Exeption ausgeben und auf keine Fall eine Programm-
unterbrechung mit folgendem gezwungenen Neustart aus-
lösen.

Besten Dank
Gruss wuf :wink:
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo wuf!
wuf hat geschrieben:ziemlich sicher ein os.error auslöst wird. Was passiert
wenn bei deinem 1. Vorschlag kein OSERROR ausgelöst wird
sondern ein anderer?
Stell' Dir vor, Du änderst auf die Schnelle was im Code und baust einen richtigen Bock und weist der Variablen ENTRY_PATH einen Integer-Wert zu. Da except: alle Exceptions abfängt, wirst Du nicht mit einer Fehlermeldung auf Deinen Flüchtigkeitsfehler hingewiesen, sondern das Programm macht so weiter, wie von Dir vorgesehen, nämlich mit makedirs(). Da scheppert es dann aber natürlich.
Bei meiner 1. Lösung schepperts dagegen sofort, denn except OSError: interessiert sich nur für OSError-Exceptions. os.chdir(4711) löst aber eine TypeError-Exception aus. Und da die try-Anweisung sich nicht zuständig fühlt für TypeErrors, wird die Exception an die nächst höhere try-Anweisung weitergeleitet, wenn es denn eine gäbe. In Deinem Script gibt es aber keine solche (was natürlich ok ist), und so bekommst Du, wenn Du das Programm von der Konsole startest eben ein
Traceback (most recent call last):
File "test.py", line 4, in ?
os.chdir(4711)
TypeError: coercing to Unicode: need string or buffer, int found
>Exit code: 1

um die Ohren gehauen.
wuf hat geschrieben:die nach oben gereichte Exception genau. Ich möchte zum
Beispiel eine Meldung von dieser nach oben gereichte
Exeption ausgeben und auf keine Fall eine Programm-
unterbrechung mit folgendem gezwungenen Neustart aus-
lösen.
Wenn Du bei anderen OSError-Arten als ENOENT keinen Script-Abbruch haben willst, darfst Du die Exception nicht hochreichen, sondern dann musst Du das Problem an Ort und Stelle angehen:

Code: Alles auswählen

   except OSError, err:
      import errno
      if err.errno == errno.ENOENT:
          os.makedirs(ENTRY_PATH)
      elif err.errno == errno.EACCES:
          # Fehlermeldung wegen fehlender Rechte
      else:
          # Fehlermeldung, dass sonstwas schief gelaufen ist
Die dt. Übersetzung des Tutoriums ist zwar schon etwas ältlich, aber im Bezug auf Exceptions hat sich da nichts Gravierendes getan:
http://starship.python.net/crew/gherman ... ode10.html
Unter http://starship.python.net/crew/gherman ... ns/tut-de/ gibt es eine aktuellere Version als PDF-Datei.
Jan
Zuletzt geändert von Voges am Samstag 31. Januar 2004, 23:58, insgesamt 1-mal geändert.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Jan

Vielen Dank für deine weiteren Erläuterungen.
Du hast mich motiviert der Fehlerbehandlung
mehr Aufmerksamkeit zu widmen. Ich werden
mich nächstens mit dem Tutorial und den ein-
schlägigen Büchern befassen.

Nochmals besten Dank für deine Bemühung
Gruss wuf :wink:
Antworten