Ausnahmebehandlung

Gute Links und Tutorials könnt ihr hier posten.
Antworten
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Hab ein gutes und leicht verständliches Tut zur Ausnahmebehandlung gefunden.
http://www.python-kurs.eu/ausnahmebehandlung.php
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dieser Kurs im allgemeinen ist an vielen Stellen ziemlich mies (ich meine mich auch hier an den OOP-Teil zu erinnern)!

Ich hab es nur mal überflogen... auf die schnelle:
- *niemals* einfach nur ``except`` ohne konkreten Exception-Typen verwenden
- das Beispiel für ``else`` anhand des Dateihandlings ist imho mindestens deprecated. Dafür gibt es mittlerweile (seit 2.5 iirc) das ``with`` Schlüsselwort im Zusammenspiel mit der Context Manager API.

Typos kann ich ja gerade noch verschmerzen, auch wenn man daran sieht, dass offensichtlich nicht mit letzter Konsequenz daran gearbeitet worden ist.

Generell ist es mir nicht wirklich didaktisch hilfreich für Anfänger aufgebaut. Das pure Aufrufen von ``print``-Statements in einem ``except``-Block kommt in der Praxis selten vor und verdeckt den wahren Nutzen von Exceptions, nämlich die *Behandlung* selbiger. Auch ohne ``print`` steht auf dem Schirm, dass etwas schief gelaufen ist und darüber hinaus noch, was genau...

Ich würde das Ding nicht wirklich empfehlen - es steht eigentlich nix drin, was nicht im offiziellen Tutorial auch schon steht.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Da hast du wohl Recht. Kann es selber schlecht vergleichen, da ich noch keine größeren Programme geschrieben hab, die jeden Fehler auffangen müssen.
Hab es auch gleich zu spüren bekommen, als ich

Code: Alles auswählen

except:
    print "Unexpected error:", sys.exc_info()[0]
eingebaut hab.
Die im meinen Fall magere Ausgabe "NameError" ist natürlich nichts im vergleich zur normalen Fehlerausgabe mit viel mehr Infos.

Wenn du ggf. ein Tut zu dem Thema gespeichert hast, würde es mir weiterhelfen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Schau Dir auf jeden Fall das offizielle Tutorial an - imho ist fehlt es da auch an besserer Erklärung der Intention von Exception Handling, aber zumindest steht dort die originale Vorlage zu oben genannten Tutorial.

Evtl guckst Du mal, ob "Learn Python the hard way" oder ein anderes hier oft empfohlenes Tutorial so etwas bietet.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Werde mal in paar Python Büchern nachschauen. Hab aber nun verstanden, dass Error Handling nicht für jedes auftretende Problem verwendet werden soll, sondern nur wenn es benötigt wird.
Sonst ist der Output von den Editoren sehr gut brauchbar.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Dami123: Fehlerbehandlung ist immer dann sinnvoll, wenn Du den Fehler auch wirklich behandeln kannst, so dass er auf den weiteren Verlauf des Programms keinen Einfluß mehr hat. Zum Beispiel nutzt es nichts, den Fehler, dass eine Datei nicht richtig gelesen werden kann, zu behandeln, wenn das Programm auf den Inhalt angewiesen ist und ohne nicht sinnvoll arbeiten kann.
Zum Behandeln eines Fehlers ist es natürlich wichtig, im voraus genau zu wissen, wo welcher Fehler genau auftreten kann. Im Zweifel sollte man eher weniger Behandeln als zu viel; man muß sich schon ziemlich sicher sein, dass die Funktion alle normalen Zustände richtig abarbeitet, bevor man sich an die Behandlung der Ausnahmen macht, weil sonst kann es passieren, dass man nicht Bedien- sondern Programmierfehler behandelt, und Du hast dann keine Chance mehr, diese Fehler zu finden.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Ja, jeden Fehler aufzufangen macht natürlich wenig Sinn, vor allem beim debuggen nicht.
Ggf. für den Endbenutzer eines Programms wäre es sinnvoll einige Fehler zu übersetzen und auszugeben.
Antworten