Ruby håndterer feil med begin/rescue/ (Rubys ekvivalent til try/catch/finally). Du exceptions og dem, med for opprydding. Ruby tillater også method-level rescue (uten eksplisitt ) for ren kode.
Ruby håndterer feil med begin/rescue/ (Rubys ekvivalent til try/catch/finally). Du exceptions og dem, med for opprydding. Ruby tillater også method-level rescue (uten eksplisitt ) for ren kode.
ensureraiserescueensurebeginbegin
result = risky_operation
rescue ArgumentError => e # rescue a SPECIFIC exception type
puts "Bad argument: #{e.message}"
rescue StandardError => e # broader catch (StandardError, not Exception)
puts "Error: #{e.message}"
retry if attempts < 3 # retry can re-run the begin block
else
puts "succeeded" # runs if NO exception
ensure
cleanup # ALWAYS runs (success or failure)
end
begin/rescue/ensure er Rubys try/catch/finally. Rescue spesifikke typer (rescue ArgumentError), bruk ensure for garantert opprydding, og else for tilfellet uten feil. retry kan gjøre et nytt forsøk på blokken.
rescue => e # ✅ bare rescue catches StandardError (the right default)
rescue StandardError # ✅ explicit, same thing
rescue Exception # ❌ AVOID — catches EVERYTHING including system signals
# (Interrupt/Ctrl-C, SystemExit) — can break the program
Viktig: en bar rescue fanger StandardError (riktig standard for applikasjonsfeil). Å fange Exception (roten) fanger alt, inkludert system-signaler som Interrupt (Ctrl-C) og SystemExit — som du vanligvis ikke vil fange, fordi det kan forhindre programmet fra å bli avbrutt eller avsluttet riktig. En vanlig Ruby-feil.
raise ArgumentError, "Amount must be positive" # raise a built-in
raise "Something failed" # raises RuntimeError
# custom exception class
class InsufficientFundsError < StandardError # inherit from StandardError
def initialize(msg = "Not enough funds")
super
end
end
raise InsufficientFundsError
def process
do_work
rescue => e # rescue WITHOUT begin — applies to the whole method body
handle(e)
ensure
cleanup
end
Riktig exception handling er essensiell for robuste Ruby-applikasjoner, og å forstå Rubys tilnærming — inkludert dens spesifikke idiomer og forbehold — er viktig.
begin/rescue/ensure strukturen (Rubys try/catch/finally), å rescue spesifikke exception-typer, bruke ensure for garantert opprydding, og den rene method-level rescue (uten eksplisitt begin) er fundamental hverdagskunnskap.
Et spesielt viktig og karakteristisk Ruby-punkt er StandardError vs Exception skillet: en bar rescue (og riktig standard) fanger StandardError, men å fange Exception (roten av hierarkiet) fanger alt — inkludert system-signaler som Interrupt (Ctrl-C) og SystemExit — som du nesten aldri vil gjøre, fordi det kan forhindre programmet fra å bli avbrutt eller avsluttet riktig, og er en vanlig, skadelig feil.
Å forstå at du bør fange StandardError (ikke Exception) for applikasjonsfeil er viktig Ruby-spesifikk kunnskap som forhindrer virkelige feil.
Å kjenne strukturen, custom exception-klasser (som arver fra StandardError), retry, method-level rescue idiomen, og spesielt StandardError-ikke-Exception forbeholdet er viktig for å skrive robust, riktig Ruby som håndterer feil elegant uten å bryte programmets evne til å bli avbrutt.
Siden ubehandlede feil og Exception-fangst feilen både forårsaker virkelige problemer, er det å mestre Rubys exception handling — dens struktur, idiomer, og det kritiske StandardError vs Exception skillet — viktig, hyppig relevant kunnskap for pålitelig Ruby-utvikling og et vanlig intervjuspørsmål.