ruby
begin
result = 10 / 0
rescue ZeroDivisionError => e
puts "Caught: #{e.message}" # Caught: divided by 0
rescue ArgumentError, TypeError => e
puts "Bad input: #{e.message}"
else
puts "No error, result = #{result}" # chạy khi KHÔNG có exception
ensure
puts "Always runs" # dọn dẹp resource, luôn chạy dù exception hay không
endThứ tự thực thi:
1. begin — code có thể raise.
2. rescue — bắt exception theo loại, khớp từ trên xuống.
3. else — chạy nếu không có exception nào xảy ra.
4. ensure — luôn luôn chạy (đóng file, release connection).
Lưu ý: rescue mặc định chỉ bắt StandardError và subclass — không bắt Exception gốc (như SystemExit, NoMemoryError).