Was ist eine Exception?
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 43 von 56.
Wenn zur Laufzeit etwas schiefgeht, wie die Division durch Null, das Parsen von "abc" als Ganzzahl oder der Aufruf einer Methode auf nil: Ruby löst eine Exception aus. Das Programm stoppt und Ruby gibt aus, was passiert ist und wo es passiert ist.
10 / 0
# ZeroDivisionError: durch 0 geteiltJede Art von Fehler ist eine eigene Klasse. Einige häufige sind:
ZeroDivisionError: Division einer Ganzzahl durch NullArgumentError: falsche Argumente an eine Methode übergeben (Integer("abc"))
NoMethodError: Aufruf einer Methode, die der Empfänger nicht besitzt (nil.upcase)TypeError: Operation mit dem falschen Objekttyp ("a" + 1)
Jede Exception-Klasse verfügt über eine .message: die menschenlesbare Beschreibung, die Ruby ausgibt, wenn die Exception nicht behandelt wird. In den nächsten Lektionen wird gezeigt, wie Sie diese Exceptions abfangen können, damit Ihr Programm weiterhin ausgeführt wird.
Aufgabe
AnfängerLies eine einzelne Eingabezeile, den Namen eines Ruby-Ausdrucks. Gib den Namen der Exception-Klasse aus, die Ruby dafür auslösen würde. Verwende eine case-Anweisung (kein tatsächliches Auslösen erforderlich):
divide-by-zero→ZeroDivisionErrornil-method→NoMethodErrorbad-integer→ArgumentErrorwrong-type→TypeError- alles andere →
Unknown
Für die Eingabe nil-method ist die Ausgabe NoMethodError.
Spickzettel
Wenn zur Laufzeit etwas schiefgeht, löst Ruby eine Exception aus und das Programm stoppt. Häufige Exception-Klassen:
ZeroDivisionError: Division einer Ganzzahl durch NullArgumentError: falsche Argumente (z. B.Integer("abc"))NoMethodError: Aufruf einer Methode, die der Empfänger nicht besitzt (z. B.nil.upcase)TypeError: Operation mit dem falschen Objekttyp (z. B."a" + 1)
10 / 0
# ZeroDivisionError: durch 0 geteiltJedes Exception-Objekt hat eine .message mit einer menschenlesbaren Beschreibung.
Probier es selbst
kind = gets.chomp
# TODO: case kind ... den passenden Namen der Exception-Klasse ausgeben
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmfluss
1Strings im Detail
String-Methoden im ÜberblickString-InterpolationIterieren über StringsSplit und JoinRückblick – String Weaver4Blöcke, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas yield-SchlüsselwortBlock-ParameterProcs und LambdasZusammenfassung – Eigener Iterator7Hashes Teil 2
Hash.new mit StandardwertenIterieren über HashesVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler10Projekt - Studentenverwaltung
ProjektübersichtStudent hinzufügen5Enumerable-Kraftpaket
Select und RejectMap-VerkettungReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Data Pipeline8Fortgeschrittene Entscheidungslogik
Case mit Klassen & RegexMulti-Value whenTernärer OperatorInline if / unlessRückblick – Noten-Klassifizierer32D-Arrays
2D-Array GrundlagenZugriff auf 2D-ElementeIterieren über 2D-ArraysGängige 2D-MusterZusammenfassung – Matrix-Operationen6Projekt - Bibliotheksverwaltung
ProjektübersichtBuch hinzufügen9Fehlerbehandlung
Was ist eine Exception?begin / rescueMehrere rescue-Klauselnensure und raiseZusammenfassung – Sicherer Taschenrechner