Warum Exception weiter oben behandeln?
-
Hallo Freunde,
habe noch Probleme mit dem Verständnis von Exceptions.
Bin auf folgenden Satz gestossen:
"Der Vorteil von Exceptions ist, dass man ganz woanders auf den Fehler reagieren kann, als er ausgelöst wurde".Sprich man kann im catch-Block sofort reagieren oder die Ausnahme "weiterschmeißen".
Welchen Sinn macht das? Kann mir jemand ein Beispiel für eine Ausnhame nennen, die man erst weiter oben im Callstack behandelt?Thx
-
Der Sinn liegt darin, dass man Fehler dort wo sie fliegen meistens gar nicht sinnvoll behandeln kann. Dann schmeisst man sie einfach zurück an den Caller ... rinse repeate ... bis die Exception da ist, wo sie behandelt werden kann, z.B. durch das Anzeigen eines Fehlerdialogs an zentraler Stelle.
-
AusnahmeFreak schrieb:
Hallo Freunde,
habe noch Probleme mit dem Verständnis von Exceptions.
Bin auf folgenden Satz gestossen:
"Der Vorteil von Exceptions ist, dass man ganz woanders auf den Fehler reagieren kann, als er ausgelöst wurde".Sprich man kann im catch-Block sofort reagieren oder die Ausnahme "weiterschmeißen".
Welchen Sinn macht das? Kann llstack behandelt?Thx
Angenommen du willst den aktuellen Spielstand in einem Spiel uebers Netzwerk an einen Server uebertragen. Der Spielstand besteht aus vielen Klassen. Waehrend du eine Instanz der Klasse Foo uebertragen willst, stolpert jemand uebers Netzwerkkabel (d.h. tief im Netzwerkcode wird eine ConnectionInterrupted Exception geworfen).
* du kannst den Fehler in Foo::transmit_over_network() fangen
* du kannst den Fehler in Game::transmit_ovr_network() fangen
* du kannst den Fehler in Game::run() fangenund du selbst kannst entscheiden, was besser ist, ohne den Fehler immer von Hand uebertragen zu muessen
-
Oder du hast eine Bibliothek die die Konfigurationsdatei einer Anwendung einlesen soll. Jetzt wird die angeforderte Datei nicht gefunden. Die Bibliothek kann nicht entscheiden was die Anwendung hier konkret tun will
* die Anwendung gibt auf
* die Anwendung arbeitet statt dessen mit Standardwerten
* die Anwendung sucht woanders nach der Datei
Durch das Werfen der Bibliothek ist sie für verschiedene Anwendungen, die verschieden reagieren, verwendbar.
-
AusnahmeFreak schrieb:
Sprich man kann im catch-Block sofort reagieren oder die Ausnahme "weiterschmeißen".
Welchen Sinn macht das?Der Sinn ist, dass du den try-catch Block in dem Fall gleich ganz weglassen kannst.
Kann mir jemand ein Beispiel für eine Ausnhame nennen, die man erst weiter oben im Callstack behandelt?
Ich würde sagen so ziemlich alle Exceptions fallen in diese Kategorie.
Das grosse Problem bei der Sache ist bloss, wie man dann vernünftige, für den User verständliche Fehlermeldungen zusammenbekommt. Das ist allerdings wieder ein anderes (nicht ganz triviales) Thema.
-
hustbaer schrieb:
Das grosse Problem bei der Sache ist bloss, wie man dann vernünftige, für den User verständliche Fehlermeldungen zusammenbekommt. Das ist allerdings wieder ein anderes (nicht ganz triviales) Thema.
Zumindest in Java ist das nicht wirklich schwierig, da Du ja Exceptions nicht nur ineinander kapseln sondern auch beliebige Informationen mitgeben kannst.
-
byto schrieb:
Zumindest in Java ist das nicht wirklich schwierig, da Du ja Exceptions nicht nur ineinander kapseln sondern auch beliebige Informationen mitgeben kannst.
Das geht eigentlich in jeder halbwegs modernen Sprache, die ich kenne.