exception-handling. 18.05.20142 18.05.2014 2 was sind exceptions? programmzustände auf grund...
Post on 06-Apr-2015
112 Views
Preview:
TRANSCRIPT
Exception-Handling
11.04.232
11.04.23 2
Was sind Exceptions?
Programmzustände auf Grund unerwarteter Ereignisse („dürfen eigentlich nicht passieren!“)• Benutzerverhalten
Fehleingaben
• Systemverhalten
Selten vorkommende reguläre Abläufe sind nicht als Ausnahmen zu behandeln• Szenarien• Über Selektion behandelbar• Beispiel
Dateiende erreicht Eingabevalidierungen
Prinzip: Trennung Nutzcode Fehlerbehandlungscode
11.04.233
11.04.23 3
Früher – Behandlung über Returncodes
Rückmeldung der fehlerbehafteten Methode an Aufrufer• Boolsche Werte, -1, …
Nachteile• Aufrufer behandelt Ausnahmen mitten im Standardablauf
„Eigentlicher“ Algorithmus wird überlagert Bei vielen Exceptions schwer lesbarer Code
• Aufrufer kann Ausnahme (Rückgabewert) ignorieren „Vogel Strauss-Taktik“
Exceptions „transportieren“ Fehler samt Informationen direkt von der Stelle des Auftretens zur Behandlungsstelle zurück
11.04.234
11.04.23 4
Verarbeitung von Ausnahmefällen
In der .NET Class Library werden in vielen Fällen Exceptions ausgelöst.
Beispiele:
- Umwandeln von String “abc“ in Zahl (Convert.ToInt32)
- Versuch eine Datei zu öffnen die nicht existiert
- Division durch 0
Um ein Programmende verhindern zu können, müssen diese Ausnahmefälle behandelt werden.
(Natürlich können auch eigene Exceptions ausgelöst werden… dazu später mehr)
11.04.235
11.04.23 5
Was tun, wenn Exception auftritt?
Ausnahmesituation bereinigen und Vorgang wiederholen• CD/DVD einlegen
• Neue Benutzereingabe
Exception mitloggen und weiter machen• Weniger kritische Situationen (Warnings)
Exception abfangen und durch eigene Exception (Wrapper) ersetzen• Sicherheitsgünde (Infos unterdrücken)
• An Benutzer angepasste Informationen
• Exception mit Inner-Exception weiterleiten
Benutzer über Ausnahme informieren und Programm beenden
11.04.236
11.04.23 6
Exceptions in C#
try…catch…finally
11.04.237
Einfache Exceptionbehandlung
Szenario:• Konto darf um maximal 1000 € überzogen werden
• Zuweisung von -2000 € auf Saldo löst Exception aus
11.04.23 7
11.04.238
11.04.23 8
Try – catch - finally
11.04.239
11.04.23 9
Eigene Exceptions erzeugen
Normalerweise ApplicationException als Basisklasse Properties sind als Zusatzinfo neben Message möglich
11.04.2310
11.04.23 10
Exception-Hierarchie (1)
Alle C#-Ausnahmen leiten sich aus der Klasse Exception ab. Wenn eine Ausnahme auftritt, wird der geeignete catch-Block durch einen Abgleich zwischen Typ der Ausnahme und der angegebenen Exception im catch-Block ermittelt.
Ein catch-Block mit exakter Übereinstimmung hat hierbei Vorrang vor einer allgemeineren Ausnahme.
11.04.2311
11.04.23 11
Exception-Hierarchie (1)class Test{ static int Zero = 0; public static void Main() { try { int j = 22 / Zero; } // Spezifische Ausnahme auffangen catch (DivideByZeroException e) { Console.WriteLine("DivideByZero {0}", e); } // Verbleibende Ausnahmen auffangen catch (Exception e) { Console.WriteLine("Exception {0}", e); } }}
Der catch-Block, mit dem die DivideByZeroException aufgefangen wird, stellt die genauere Übereinstimmung dar, daher wird dieser Codeabschnitt ausgeführt.
11.04.2312
11.04.23 12
Exception-Hierarchie (2)
Wird eine Exception innerhalb einer Methode nicht abgefangen, wird die Exception an die aufrufende Methode weitergereicht.
Wenn eine Exception auch in der obersten Ebene (Main Methode) nicht abgefangen wird, so wird das Programm beendet!
11.04.2313
11.04.23 13
Exception-Hierarchie (2)
Bei Ausführung der Division wird eine Exception erzeugt. Die Laufzeitumgebung sucht nach einem try-Block in AFunction(), findet jedoch keinen try-Block, daher springt sie aus AFunction() und sucht in Main() nach einem try-Block. Hier ist ein try-Block vorhanden, also wird nach einem entsprechenden catch-Block gesucht. Anschließend wird der catch-Block ausgeführt.
class Test{ static int Zero = 0; static void AFunction() { int j = 22 / Zero; // Die folgende Zeile wird nie ausgeführt. Console.WriteLine("In AFunction()"); }
public static void Main() { try { AFunction(); } catch (DivideByZeroException e) { Console.WriteLine("DivideByZero {0}", e); } }}
11.04.2314
11.04.23 14
Inner-Exceptions erzeugen
Erzeugen über speziellen Konstruktor• Property kann zusätzliche Info liefern
Amount soll abgehoben werden• Exception auffangen und mit eigenen Infos weitergeben
11.04.2315
11.04.23 15
Inner-Exceptions auswerten
Verarbeiten der Liste von Exceptions
11.04.2316
Ergebnis
11.04.23 16
11.04.2317
11.04.23 17
Übersicht der Exception-Klassenhierarchie MSDN
Exception type Base type DescriptionException Object Base class for all exceptions.SystemException Exception Base class for all runtime-generated errors.
AccessViolationException SystemException Thrown by the runtime only when invalid memory is accessed.InvalidOperationException SystemException Thrown by methods when in an invalid state.ArgumentException SystemException Base class for all argument exceptions.
ExternalException SystemException Base class for exceptions that occur or are targeted at environments outside the runtime.
ComException ExternalException Exception encapsulating COM HRESULT information.
ArgumentNullException ArgumentException Thrown by methods that do not allow an argument to be null.
ArgumentOutOfRangeException ArgumentException Thrown by methods that verify that arguments are in a given range.
IndexOutOfRangeException SystemException Thrown by the runtime only when an array is indexed improperly.
NullReferenceException SystemException Thrown by the runtime only when a null object is referenced.
11.04.2318
11.04.23 18
Properties zum Informationsaustausch
11.04.2319
11.04.23 19
Zwei Zentrale Exceptionhandler
top related