Handling Errors with Begin/Rescue/End Blocks in Ruby
📖 Scenario: Imagine you are writing a small program that divides numbers. Sometimes, the user might enter zero as the divisor, which causes an error. We want to handle this error gracefully so the program doesn't crash.
🎯 Goal: You will build a Ruby program that safely divides two numbers using begin, rescue, and end blocks to catch division errors and print a friendly message.
📋 What You'll Learn
Create two variables with exact values for dividend and divisor
Create a variable to hold the result initialized to nil
Use a begin/rescue/end block to perform division and catch ZeroDivisionError
Print the result or an error message
💡 Why This Matters
🌍 Real World
Handling errors like division by zero is common in programs that do math or process user input. This prevents crashes and improves user experience.
💼 Career
Understanding error handling with begin/rescue/end blocks is essential for writing robust Ruby applications, a key skill for Ruby developers.
Progress0 / 4 steps
1
Set up dividend and divisor variables
Create two variables called dividend and divisor with the exact values 10 and 0 respectively.
Ruby
Hint
Use simple assignment like dividend = 10 and divisor = 0.
2
Create a result variable
Create a variable called result and set it to nil.
Ruby
Hint
Use result = nil to start with no value.
3
Use begin/rescue/end to divide safely
Write a begin block where you set result to dividend / divisor. Add a rescue ZeroDivisionError block that sets result to the string "Cannot divide by zero". Close the block with end.
Ruby
Hint
Use begin and end to wrap the division. Rescue ZeroDivisionError to handle division by zero.
4
Print the result
Write a puts statement to print the value of result.
Ruby
Hint
Use puts result to show the output.
Practice
(1/5)
1. What is the purpose of the begin/rescue/end block in Ruby?
easy
A. To declare variables
B. To create a loop that repeats code
C. To define a new method
D. To handle errors and prevent the program from crashing
Solution
Step 1: Understand the role of begin block
The begin block contains code that might cause an error.
Step 2: Understand the role of rescue block
The rescue block catches errors and handles them so the program doesn't crash.
Final Answer:
To handle errors and prevent the program from crashing -> Option D
Quick Check:
begin/rescue = error handling [OK]
Hint: Remember: begin/rescue is for catching errors safely [OK]
Common Mistakes:
Thinking begin/rescue creates loops
Confusing rescue with method definition
Using begin/rescue to declare variables
2. Which of the following is the correct syntax to handle exceptions using begin/rescue/end in Ruby?
easy
A. begin
risky_code
rescue
handle_error
end
B. try {
risky_code
} catch {
handle_error
}
C. if error then
handle_error
end
D. begin:
risky_code
except:
handle_error
Solution
Step 1: Identify Ruby syntax for error handling
Ruby uses begin, rescue, and end keywords for exceptions.
Step 2: Compare options with Ruby syntax
begin
risky_code
rescue
handle_error
end matches Ruby syntax exactly; others use syntax from other languages or incorrect keywords.
Final Answer:
begin\n risky_code\nrescue\n handle_error\nend -> Option A
Quick Check:
Ruby error handling = begin/rescue/end [OK]
Hint: Look for Ruby keywords: begin, rescue, end [OK]
Common Mistakes:
Using try/catch like other languages
Using if/else for error handling
Mixing Python or JavaScript syntax
3. What will be the output of this Ruby code?
begin
puts 10 / 0
rescue ZeroDivisionError
puts "Cannot divide by zero"
end
medium
A. Cannot divide by zero
B. 0
C. 10
D. ZeroDivisionError
Solution
Step 1: Identify the error in the code
The code tries to divide 10 by 0, which raises a ZeroDivisionError.
Step 2: Understand the rescue block
The rescue block catches ZeroDivisionError and prints "Cannot divide by zero" instead of crashing.
Final Answer:
Cannot divide by zero -> Option A
Quick Check:
ZeroDivisionError caught = message printed [OK]
Hint: Divide by zero triggers rescue message [OK]
Common Mistakes:
Expecting program to crash
Thinking it prints 0 or 10
Confusing error name with output
4. Find the error in this Ruby code snippet:
begin
puts 5 + "3"
rescue
puts "Error caught"
end
medium
A. The begin block should be replaced with try
B. The rescue block is missing the error type
C. You cannot add a number and a string directly
D. The code will run without errors
Solution
Step 1: Analyze the operation inside begin block
Adding 5 (number) and "3" (string) causes a TypeError in Ruby.
Step 2: Check error handling
The rescue block catches any error and prints "Error caught"; the error is due to incompatible types.
Final Answer:
You cannot add a number and a string directly -> Option C
Quick Check:
Type mismatch causes error caught [OK]
Hint: Check data types before adding values [OK]
Common Mistakes:
Thinking rescue needs error type always
Assuming code runs without error
Confusing begin with try
5. How can you modify this code to handle multiple specific errors separately?
begin
# risky code
rescue
puts "An error occurred"
end
hard
A. Use if statements inside begin block
B. Use multiple rescue clauses with specific error classes
C. Replace rescue with else to catch errors
D. Put all code inside rescue block
Solution
Step 1: Understand handling multiple errors
Ruby allows multiple rescue clauses to catch different error types separately.
Step 2: Apply multiple rescue clauses
Write rescue clauses like rescue ZeroDivisionError and rescue IOError to handle errors distinctly.
Final Answer:
Use multiple rescue clauses with specific error classes -> Option B
Quick Check:
Multiple rescue = specific error handling [OK]
Hint: Use separate rescue for each error type [OK]
Common Mistakes:
Using else instead of rescue
Trying to catch errors with if statements
Putting code inside rescue block
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.