Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

12.2 try und catch

12.2 try und catch

Wie Sie vielleicht an der Überschrift schon erkennen können, geht es jetzt um das Absichern von Quelltextteilen. Immer dann, wenn man um einen Quelltext "try" und "catch" herum baut, wird der darin befindliche Code, in einer Art geschützten Umgebung ausgeführt und wenn was schief läuft, wird sofort in den "catch" Abschnitt gesprungen, um dort eine entsprechende Meldung abzugeben, bzw. den Fehler weiter delegieren zu können.

Das Schema sieht so aus: try <Anweisung> catch ((<Ausnahmetyp> <Variable>)|...) <Anweisung>

Hier mal ein kleines Beispiel

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
					
try {
	int iWert = 10;

	// Von -5 bis 5
	for (int iCounter=-2; iCounter<=2; iCounter++) {
		printf("%i\n", iWert / iCounter);
	} // end of for
} catch (...) {
	printf("Geteilt durch 0 ist nicht erlaubt!\n");
} // end of try
					

Ausgabe:

-5
-10
Geteilt durch 0 ist nicht erlaubt!
		

Wie Sie sehen können, wird in der Schleife irgendwann eine Division durch 0 auftreten und dann würde das Programm abstürzen. Dies liegt daran, dass intern eine Exception ausgelöst wird, in dem Fall ein Run-Time-Error 200. Genau in diesem Fall, wird in den "catch" Block gesprungen und man kann dem Anwender auf diese Situation hinweisen.

Auffällig ist, dass ich in den Klammern des "catch" drei Punkte gesetzt habe. Normalerweise kommt hier ein Fehlertyp hin, aber wenn man nicht weiß, was alles für Fehler auftreten können bzw. nicht weiß, wie auftretende Fehler definiert sind, kann man diesen Platzhalter benutzen und allgemein reagieren. Erst wenn man den Typ kennt und angibt, kann man sich aus ihm nähere Informationen zur Fehlerursache holen. Dies werde ich aber wie erwähnt erst später behandeln.

Des Weiteren sollten Sie sehen, dass der obige Block sofort verlassen wird, falls ein Fehler auftritt und dass man nicht wieder zurückkehren kann. In meinem Beispiel bedeutet dies, dass die Ausgabe nach dem Fehler beendet wird. Deshalb sollte man genau überlegen, wo man ein "try" einbaut. Im Falle des Beispiels wäre es also besser, das Abfangen des Fehlers, innerhalb der Schleife zu machen. Aber werden Sie bitte nicht Faul. Eine Division durch 0 kann man auch im Vorfeld mit einer if Anweisung abfangen, da ein "try" um vieles langsamer ausgeführt wird. Alles was Sie also geschickt mit einer Bedingung abfangen können, sollten Sie unter allen Umständen auch so abfangen. Nur dann, wenn man absolut nicht weiß, wie man etwas mit einer Bedingung lösen kann, benutzt man es in ein "try".

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012