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
Inhalt von Entrys prüfen
Hallo wuf!
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.
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
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.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?
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.
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: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.
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
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.
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
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