Bird
Raised Fist0
Rubyprogramming~10 mins

Multiple rescue clauses in Ruby - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Multiple rescue clauses
Start
↓
Try block
↓
Exception?
No→End
Yes↓
Rescue clause 1: matches?
No→Rescue clause 2: matches?
↓
Handle Exception
↓
End
The program tries code, checks for exceptions, and handles them with the first matching rescue clause, then ends.
Execution Sample
Ruby
begin
  1 / 0
rescue ZeroDivisionError
  puts "Zero division error caught"
rescue StandardError
  puts "Standard error caught"
end
This code tries to divide by zero, catches the ZeroDivisionError first, and prints a message.
Execution Table
StepActionEvaluationResult
1Execute begin block: 1 / 0Raises ZeroDivisionErrorException raised
2Check rescue ZeroDivisionErrorMatches exceptionRescue clause 1 runs
3Execute rescue clause 1puts messageOutput: Zero division error caught
4End of begin-rescue blockNo more codeProgram continues
💡 Exception handled by first matching rescue clause, program continues normally
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
exceptionnilZeroDivisionError raisedHandled by rescue clause 1Handlednil
Key Moments - 2 Insights
Why does the first rescue clause run instead of the second?
Because the exception raised is ZeroDivisionError, which matches the first rescue clause exactly, so Ruby does not check further clauses (see execution_table step 2).
What happens if no rescue clause matches the exception?
The exception is unhandled and will cause the program to crash or propagate up (not shown in this example, but implied in concept_flow).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what exception is raised at step 1?
ANo exception
BStandardError
CZeroDivisionError
DNameError
💡 Hint
Check the 'Evaluation' column in execution_table row 1
At which step does the program print the message 'Zero division error caught'?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Look at the 'Result' column in execution_table row 3
If the exception was a RuntimeError, which rescue clause would run?
ARescue clause 1 (ZeroDivisionError)
BRescue clause 2 (StandardError)
CNo rescue clause
DBoth rescue clauses
💡 Hint
StandardError is a parent of RuntimeError, so rescue clause 2 matches (concept_flow and key_moments)
Concept Snapshot
begin
  # code that might raise
rescue ExceptionType1
  # handle ExceptionType1
rescue ExceptionType2
  # handle ExceptionType2
end

- Ruby tries rescue clauses in order.
- First matching rescue handles the exception.
- If none match, exception propagates.
Full Transcript
This example shows how Ruby handles multiple rescue clauses. The program tries to run code that divides by zero, which raises a ZeroDivisionError. Ruby checks the first rescue clause and finds it matches the exception, so it runs that rescue block and prints a message. It does not check further rescue clauses. If no rescue clause matched, the exception would be unhandled and cause an error. This step-by-step trace helps understand how Ruby picks the right rescue clause.

Practice

(1/5)
1. What is the purpose of using multiple rescue clauses in Ruby?
easy
A. To repeat the same error handling multiple times
B. To run code only when no errors occur
C. To handle different types of errors with specific responses
D. To skip error handling entirely

Solution

  1. Step 1: Understand rescue clauses

    Multiple rescue clauses allow you to catch different error types separately.
  2. Step 2: Purpose of specific error handling

    This helps you respond differently depending on the error type.
  3. Final Answer:

    To handle different types of errors with specific responses -> Option C
  4. Quick Check:

    Multiple rescue clauses = specific error handling [OK]
Hint: Multiple rescue clauses catch different errors separately [OK]
Common Mistakes:
  • Thinking rescue clauses run only when no errors occur
  • Assuming multiple rescue repeats same handling
  • Believing rescue skips error handling
2. Which of the following is the correct syntax for multiple rescue clauses in Ruby?
easy
A. try # code rescue ZeroDivisionError # handle zero division rescue StandardError # handle other errors end
B. begin # code catch ZeroDivisionError # handle zero division catch StandardError # handle other errors end
C. begin # code rescue ZeroDivisionError, StandardError # handle errors end
D. begin # code rescue ZeroDivisionError # handle zero division rescue StandardError # handle other errors end

Solution

  1. Step 1: Identify Ruby error handling syntax

    Ruby uses begin and rescue for error handling, not try or catch.
  2. Step 2: Check multiple rescue clauses

    Multiple rescue clauses are written one after another inside begin...end.
  3. Final Answer:

    begin # code rescue ZeroDivisionError # handle zero division rescue StandardError # handle other errors end -> Option D
  4. Quick Check:

    Ruby uses begin-rescue-end with multiple rescue [OK]
Hint: Use begin-rescue-end blocks for multiple error types [OK]
Common Mistakes:
  • Using try or catch instead of rescue
  • Combining errors in one rescue without comma
  • Incorrect block keywords
3. What will be the output of this Ruby code?
begin
  1 / 0
rescue ZeroDivisionError
  puts 'Zero division error caught'
rescue StandardError
  puts 'Standard error caught'
end
medium
A. Zero division error caught
B. Standard error caught
C. No output, program crashes
D. SyntaxError

Solution

  1. Step 1: Identify the error raised

    The code 1 / 0 raises a ZeroDivisionError.
  2. Step 2: Match error with rescue clauses

    The first rescue clause catches ZeroDivisionError and prints the message.
  3. Final Answer:

    Zero division error caught -> Option A
  4. Quick Check:

    ZeroDivisionError triggers first rescue [OK]
Hint: Match error type to first rescue clause that fits [OK]
Common Mistakes:
  • Assuming StandardError rescue runs first
  • Thinking program crashes without rescue
  • Confusing syntax error with runtime error
4. Identify the error in this Ruby code with multiple rescue clauses:
begin
  puts 'Start'
rescue
  puts 'Rescue block'
rescue ZeroDivisionError
  puts 'Zero division error'
end
medium
A. Missing ensure block causes error
B. Multiple rescue clauses after a generic rescue cause syntax error
C. No error, code runs fine
D. Rescue clauses must be inside methods only

Solution

  1. Step 1: Check for syntax errors

    In Ruby, a generic rescue clause must come after all specific rescue clauses. Placing a generic rescue before specific ones causes a syntax error.
  2. Step 2: Analyze the code

    The code places a generic rescue first, then a specific rescue, which is invalid syntax.
  3. Final Answer:

    Multiple rescue clauses after a generic rescue cause syntax error -> Option B
  4. Quick Check:

    Generic rescue must be last [OK]
Hint: Generic rescue clause must come after specific rescue clauses [OK]
Common Mistakes:
  • Thinking generic rescue before specific causes syntax error
  • Believing ensure block is mandatory
  • Assuming rescue clauses only work inside methods
5. Given this Ruby code, what will be printed?
def test
  begin
    raise ArgumentError, 'Wrong argument'
  rescue ZeroDivisionError
    puts 'Zero division error'
  rescue ArgumentError
    puts 'Argument error caught'
  ensure
    puts 'Always runs'
  end
end
test
hard
A. Argument error caught Always runs
B. Zero division error Always runs
C. Always runs Argument error caught
D. No output, error not handled

Solution

  1. Step 1: Identify raised error

    The code raises ArgumentError with message 'Wrong argument'.
  2. Step 2: Match rescue clauses

    The ArgumentError rescue clause runs and prints 'Argument error caught'.
  3. Step 3: Understand ensure block

    The ensure block always runs, printing 'Always runs'.
  4. Final Answer:

    Argument error caught Always runs -> Option A
  5. Quick Check:

    ArgumentError rescued, ensure always runs [OK]
Hint: Ensure block runs after rescue regardless of error [OK]
Common Mistakes:
  • Thinking ensure runs before rescue
  • Assuming wrong rescue clause runs
  • Ignoring ensure block output
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard