Mehrere rescue-Klauseln
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 45 von 56.
Ein begin-Block kann mehrere rescue-Klauseln haben. Ruby prüft diese von oben nach unten und führt die erste aus, deren Ausnahmeklasse übereinstimmt.
begin
number = Integer(gets.chomp)
result = 100 / number
puts result
rescue ArgumentError
puts "That's not a valid number."
rescue ZeroDivisionError
puts "Can't divide by zero."
endDie Reihenfolge ist wichtig: Listen Sie spezifische Klassen vor allgemeinen auf. Ein zuerst platziertes StandardError würde alles abfangen, sodass die späteren Zweige niemals ausgeführt würden.
Sie können auch mehrere Ausnahmeklassen in einem einzigen Branch abfangen, indem Sie diese durch Kommas getrennt auflisten:
begin
risky_call
rescue ArgumentError, TypeError => e
puts "Bad input: #{e.message}"
endVerwenden Sie dies, wenn der Wiederherstellungscode für mehrere Fehlerzustände derselbe ist.
Aufgabe
EinfachLies zwei Zeilen von der Eingabe ein, die beide als Ganzzahlen gedacht sind. Verwende Integer(...) für beide und dividiere dann die erste durch die zweite.
Behandle drei Fälle mit separaten rescue-Zweigen:
ArgumentError→ gibBad number!ausZeroDivisionError→ gibCannot divide by zero!ausTypeError→ gibWrong type!aus
Wenn alles funktioniert, gib Result: <a / b> aus (Ganzzahldivision).
Für die Eingabe 10 / 2 lautet die Ausgabe Result: 5. Für 10 / 0 lautet sie Cannot divide by zero!. Für 10 / abc lautet sie Bad number!.
Probier es selbst
raw_a = gets.chomp
raw_b = gets.chomp
# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
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Übe selbstständig: Online-Ruby-Compiler