Menu
Coddy logo textTech

Mehrere rescue-Klauseln

Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 45 von 56.

Ein begin-Block kann mehrere rescue-Klauseln enthalten. Ruby prüft sie 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."
end

Die Reihenfolge ist wichtig: Führe spezifische Klassen vor allgemeinen auf. Wenn StandardError an erster Stelle steht, würde es alles abfangen, und die späteren Zweige würden nie ausgeführt.

Du kannst auch mehrere Fehlerklassen in einem Zweig abfangen, indem du sie durch Kommas getrennt auflistest:

begin
  risky_call
rescue ArgumentError, TypeError => e
  puts "Bad input: #{e.message}"
end

Verwende dies, wenn der Wiederherstellungscode für mehrere Fehlerarten gleich ist.

challenge icon

Aufgabe

Einfach

Lies zwei Zeilen aus input, die beide als ganze Zahlen gedacht sind. Verwende für beide Integer(...) und teile anschließend die erste durch die zweite.

Behandle drei Fälle mit separaten rescue-Zweigen:

  • ArgumentError → gib Bad number! aus
  • ZeroDivisionError → gib Cannot divide by zero! aus
  • TypeError → gib Wrong type! aus

Wenn alles funktioniert, gib Result: <a / b> aus (Ganzzahldivision).

Für 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
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Programmfluss

Übe selbstständig: Online-Ruby-Compiler