Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund...

20
Exception-Handling

Transcript of Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund...

Page 1: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

Exception-Handling

Page 2: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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

Page 3: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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

Page 4: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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)

Page 5: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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

Page 6: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

11.04.236

11.04.23 6

Exceptions in C#

try…catch…finally

Page 7: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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

Page 8: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

11.04.238

11.04.23 8

Try – catch - finally

Page 9: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

11.04.239

11.04.23 9

Eigene Exceptions erzeugen

Normalerweise ApplicationException als Basisklasse Properties sind als Zusatzinfo neben Message möglich

Page 10: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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.

Page 11: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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.

Page 12: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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!

Page 13: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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); } }}

Page 14: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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

Page 15: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

11.04.2315

11.04.23 15

Inner-Exceptions auswerten

Verarbeiten der Liste von Exceptions

Page 16: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

11.04.2316

Ergebnis

11.04.23 16

Page 17: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

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.

Page 18: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

11.04.2318

11.04.23 18

Properties zum Informationsaustausch

Page 19: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)

11.04.2319

11.04.23 19

Zwei Zentrale Exceptionhandler

Page 20: Exception-Handling. 18.05.20142 18.05.2014 2 Was sind Exceptions? Programmzustände auf Grund unerwarteter Ereignisse (dürfen eigentlich nicht passieren!)