2009-03-30 4 views
5

Ich habe Zugriff auf Rubys Exception-Hierarchie (es ist in der Spitzhacke und der Kolibri erwähnt), aber ich bin mir nicht sicher, welche Ausnahme zu verwenden, weil ich keine Informationen zu jedem gefunden habe der Begriffe bedeuten.Mit der richtigen Ausnahme Unterklasse in Ruby

Ist die Verwendung der richtigen Ausnahmeklasse von Bedeutung?

+0

Gerade eine Beschreibung der Ausnahmeklassen bei http://redmine.ruby-lang.org/projects/ruby/wiki/ExceptionClassesDoc gefunden –

Antwort

8

"Es kommt darauf an".

Eines der Hauptprobleme mit Ruby ist das Fehlen einer guten Spezifikation. Früher war es allerdings schlimmer.

Dies ist hauptsächlich eine Frage des Stils: Wenn Ihr Fehler gut mit einer der eingebauten Ausnahmeklassen beschrieben werden kann, verwenden Sie ihn. Wenn Sie denken, dass eine Unterklasse sinnvoll ist, verwenden Sie sie.

Andernfalls könnten Sie betrachten folgen:

Erstellen von sehr aufwendigen Ausnahme Hierarchien ist eine Verschwendung von Zeit. Niemand Enden der Pflege und die ganze Mühe geht zu verschwenden. Erstellen Sie stattdessen eine Ausnahme pro Bibliothek oder Namespace und haben Sie einen Ausnahmegrund innerhalb der Ausnahme, um den Typ der Ausnahme anzugeben.

Fügen Sie beispielsweise für Ihre Betriebssystemverkapselung libary eine Ausnahme mit dem Namen OsencapException ein.

+1

Anstatt eine Ausnahme pro Bibliothek zu erstellen, würde ich vorschlagen, eine Ausnahme für jede Bedingung zu erstellen du willst fangen. Sie können einen RuntimeError standardmäßig verwenden. Wenn Sie feststellen, dass Sie die Fehlermeldung in einem Rettungsblock analysieren, erstellen Sie eine neue Klasse. – Arsen7

1

Nr

Oder besser gesagt, wenn es dir egal, spielt es keine Rolle im Allgemeinen nicht an Dritte weitergegeben. Wenn Sie eine Bibliothek schreiben, sollten Sie etwas verwenden, das die Benutzer Ihrer Bibliothek verstehen, aber das ist es auch schon.

10

Es ist wichtig beim Erstellen eigener Ausnahmen. Ein wichtiger Vorbehalt ist, dass Ausnahmen, die von Exception anstelle von StandardError (häufig vorkommender Fehler) erben, nicht von der Rettung abgefangen werden (ohne Argumente).

+8

Das bedeutet, dass jede Exception-Klasse, die Sie erstellen, immer von StandardError erben sollte, niemals direkt von Exception. Ich denke du hättest das etwas klarer machen können ... –

Verwandte Themen