Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
wird, wird auf dieselbe Weise weitergereicht wie eine durch
raise
ausgelöste Ausnahme. Ausnahmeobjekte, Ausnahmeweitergabe, die Methode
raise
und die
rescue
-Klausel werden in den nachfolgenden Unterabschnitten detailliert beschrieben.
    5.6.1 Ausnahmeklassen und Ausnahmeobjekte
    Ausnahmeobjekte sind Instanzen der Klasse
Exception
oder einer ihrer Unterklassen. Es existieren zahlreiche Unterklassen. Diese Unterklassen definieren üblicherweise keine neuen Methoden oder neues Verhalten, sondern ermöglichen die Kategorisierung von Ausnahmen nach Typ. Die Klassenhierarchie wird in Abbildung 5.5 illustriert.
    Sie brauchen nicht mit jeder diese Ausnahmeunterklassen vetraut zu sein. Ihre Namen teilen Ihnen mit, wofür sie verwendet werden. Es ist wichtig, darauf hinzuweisen, dass die meisten dieser Unterklassen eine Klasse namens
StandardError
erweitern. Dies sind die »normalen« Ausnahmen, die typische Ruby-Programme zu behandeln versuchen. Die anderen Ausnahmen repräsentieren Ausnahmen einer niedrigeren Ebene, schwerer wiegende Ausnahmen oder aber Ausnahmen, für die eine Abhilfe schwieriger ist, und normale Ruby-Programme versuchen im Allgemeinen nicht, sie zu behandeln.
    Abbildung 5.5 Die Exception-Klassenhierarchie von Ruby
    Wenn Sie ri verwenden, um die Dokumentation dieser Ausnahmeklassen zu finden, werden Sie herausfinden, dass die meisten von ihnen undokumentiert sind. Das liegt zum Teil daran, dass die meisten von ihnen keine neuen Methoden zu denjenigen hinzufügen, die die Basisklasse
Exception
definiert. Das Wichtigste, was Sie über eine bestimmte Ausnahmeklasse wissen sollten, ist, wann sie ausgelöst werden kann. Das wird normalerweise durch die Methoden dokumentiert, die diese Ausnahme auslösen, und nicht durch die Ausnahmeklasse selbst.
    5.6.1.1 Die Methoden von Ausnahmeobjekten
    Die Klasse
Exception
definiert zwei Methoden, die Details über die Ausnahme zurückliefern. Die Methode
message
gibt einen String zurück, der für Menschen lesbare Details darüber enthalten kann, was schiefgelaufen ist. Wenn ein Ruby-Programm mit einer unbehandelten Ausnahme beendet wird, wird diese Meldung normalerweise dem Endbenutzer angezeigt, aber der vorrangige Zweck dieser Meldung besteht darin, einem Programmierer bei der Diagnose des Problems zu helfen.
    Die andere wichtige Methode von Ausnahmeobjekten ist
backtrace
. Diese Methode gibt ein Array mit Strings zurück, das den Call-Stack zum Zeitpunkt der Auslösung der Ausnahme repräsentiert. Jedes Element des Array ist ein String in der Form
Dateiname
:
Zeilennummer
in
Methodenname
    Das erste Element des Array gibt die Position an, wo die Ausnahme ausgelöst wurde; das zweite Element gibt die Position an, wo die Methode aufgerufen wurde, die die Ausnahme ausgelöst hat; das dritte Element gibt die Position an, wo diese Methode aufgerufen wurde und so weiter. (Die Kernel-Methode
caller
gibt einen Stack-Trace im selben Format zurück; Sie können es in irb ausprobieren.) Ausnahmeobjekte werden normalerweise durch die Methode
raise
erzeugt. Wenn das geschehen ist, setzt die Methode
raise
den Stack-Trace der Ausnahme entsprechend. Wenn Sie Ihr eigenes Ausnahmeobjekt erzeugen, können Sie den Stack-Trace mithilfe der Methode
set_backtrace
auf einen beliebigen Wert setzen.
    5.6.1.2 Ausnahmeobjekte erzeugen
    Ausnahmeobjekte werden üblicherweise mithilfe der Methode
raise
erzeugt, wie wir unten sehen werden. Sie können allerdings auch Ihre eigenen Objekte erzeugen, indem Sie die normale Methode
new
oder eine andere Klassenmethode namens
exception
verwenden. Beide akzeptieren einen einzelnen, optionalen String als Argument. Wenn er angegeben wird, wird der String zum Wert der Methode
message
.
    5.6.1.3 Neue Ausnahmeklassen definieren
    Wenn Sie ein Modul mit Ruby-Code definieren, ist es oft angebracht, Ihre eigene Unterklasse von
StandardError
für Ausnahmen zu definieren, die spezifisch für Ihr Modul sind. Das kann eine triviale, einzeilige Unterklasse sein:
class MyError < StandardError; end
    5.6.2 Ausnahmen mit raise auslösen
    Die Kernel-Methode
raise
löst eine Ausnahme aus.
fail
ist ein Synonym, das manchmal verwendet wird, wenn die Erwartung besteht, dass die Ausnahme das Ende des Programms bewirkt. Es gibt verschiedene Möglichkeiten,
raise
aufzurufen:
    Wenn
raise
ohne Argumente aufgerufen wird, wird ein neues
RuntimeError
-Objekt (ohne Meldung) erzeugt und ausgelöst. Oder wenn raise innerhalb einer
rescue
-Klausel ohne Argumente aufgerufen wird, wird einfach

Weitere Kostenlose Bücher