Generar excepciones en Ruby

Una excepción es un evento no deseado o inesperado que ocurre durante la ejecución de un programa, es decir, en tiempo de ejecución, que interrumpe el flujo normal de las instrucciones del programa. Como sabemos, el código encerrado entre el bloque de inicio y final está totalmente seguro para el manejo de Excepciones y el bloque de rescate le dice al Ruby, el tipo de excepción que se va a manejar. 
Principalmente, las excepciones de tiempo de ejecución se manejan si hay algún error en el código, tal vez escrito por un codificador ingenuo, este tipo de errores pueden aumentar «error dividido por cero», «error de índice fuera del rango», etc. donde el programa detiene la ejecución cada vez que estas excepciones ocurren si no se manejan. Mediante el uso de la declaración de aumento, podemos generar excepciones manuales definidas por el usuario. Como, por ejemplo, en un programa de transacciones de cajero automático para generar una excepción cuando el usuario ingresa un número de cuenta no válido para retirar.
Sintaxis:

raise exception-type "exception message" condition

Cada vez que se genera la declaración de aumento, llama al rescate y la ejecución comienza desde allí. La declaración de aumento de forma predeterminada genera RuntimeError. 
Ejemplo : 
 

Ruby

# Ruby program to illustrate 
# use of raise statement
   
begin
          
    puts 'This is Before Exception Arise!'
          
       # using raise to create an exception  
       raise 'Exception Created!'
    
    puts 'After Exception'
end

Producción : 
 

This is Before Exception Arise!
Exception Created!
  • Consulte los cuatro tipos de declaraciones de aumento en el siguiente código: 
    Ejemplo: 

Ruby

#!/usr/bin/ruby
puts "type-1\n"
begin
 
  # re-raises the current exception
  # (RuntimeError as they are no current exception)
   raise
rescue
   puts 'Tony got rescued.'
end
puts 'Tony returned safely'
  
puts "\ntype-2\n"
begin
 
   # sets this message to the string in the superclass,
   # this exception will be given top priority in the call stack.
   raise 'Quill got rescued.'
   puts 'quill'  # won't execute
rescue StandardError => e 
   puts e.message
end
puts 'Quill is back to ship.'
  
puts "\ntype-3\n"
begin
# uses the first argument to create an exception
# and then sets the message to the second argument.
   raise StandardError.new 'Groot got rescued.'
rescue StandardError => e  # e=>object
 
  # prints the attached string message.
  puts e.message
end
  
puts "\ntype-4\n"
begin
a = 30
b = 0
# here a conditional statement is added
# to execute only if the statement is true
 
    # raises the exception only if the condition is true
    raise  ZeroDivisionError.new 'b should not be 0' if b == 0
    puts a/b
rescue StandardError => e 
   puts e.message 
end
  
puts
begin
a = 30
 
# changing the b value, it passes the raise and executes further
b = 2
 
    # raises the exception only if the condition is true
    raise  ZeroDivisionError.new 'b should not be 0' if b == 0
    print "a/b = ", a / b
rescue StandardError => e 
   puts e.message 
end
Producción: 

type-1
Tony got rescued.
Tony returned safely

type-2
Quill got rescued.
Quill is back to ship.

type-3
Groot got rescued.

type-4
b should not be 0

a/b = 15

 

  • Compruebe la diferencia entre Runtime y Raised Exception. 
    Ejemplo : 

Ruby

#!/usr/bin/ruby
puts "Raised Exception:\n"
begin
a = 30
b = 0
 
    # raises the exception only if the condition is true
    raise ZeroDivisionError.new 'b should not be 0' if b == 0
    print "a/b = ", (1 + 2) * (a / b)
rescue ZeroDivisionError => e 
   puts e.message
 
   # prints the error stack, but a raised exception has zero stack
   puts e.backtrace
end
  
puts "\nRuntime Exception:\n"
begin
a = 30
b = 0
x=(1 + 2) * (a / b)
 
    # raises the exception only if the condition is true
    raise ZeroDivisionError.new 'b should not be 0' if b == 0
    print "a/b = ", (1 + 2) * (a / b)
rescue ZeroDivisionError => e 
 
  # prints the message=>(divided by 0)
  # from ZeroDivisionError class
   puts e.message
   puts e.backtrace
end
Producción: 

Raised Exception:
b should not be 0
(repl):8:in `'
/run_dir/repl.rb:41:in `eval'
/run_dir/repl.rb:41:in `run'


Runtime Exception:
divided by 0
(repl):21:in `/'
(repl):21:in `'
/run_dir/repl.rb:41:in `eval'
/run_dir/repl.rb:41:in `run'

 

  • En el ejemplo anterior, Runtime Exception tiene una pila de errores

Publicación traducida automáticamente

Artículo escrito por Tejashwi5 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *