Un buen programa (o programador) predice errores y se las arregla para manejarlos de manera efectiva. Esto no es tan fácil como suena. Las excepciones son los errores que ocurren en tiempo de ejecución. Detiene la ejecución de un programa. Son causados por una amplia variedad de circunstancias excepcionales, como quedarse sin memoria, no poder abrir un archivo, intentar inicializar un objeto a un valor imposible, etc.
¿Qué es una excepción?
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.
Error frente a excepción
Errores:
- Los errores son problemas inesperados que pueden surgir durante la ejecución de un programa informático.
- Los errores no se pueden manejar.
- Todos los errores son excepciones.
Excepciones:
- Las excepciones son eventos inesperados que pueden surgir durante el tiempo de ejecución.
- Las excepciones se pueden manejar mediante mecanismos de prueba y captura.
- Todas las excepciones no son errores.
Enfoque tradicional para manejar excepciones
El enfoque tradicional para manejar la excepción incluye el uso de códigos de retorno. El método abierto devuelve un valor específico y dice que falló. Luego, este valor se transmite de vuelta a la capa de rutinas de llamada hasta que alguien quiera asumir la responsabilidad. El problema de este enfoque es que gestionar todos estos errores era muy complejo. Si un método llama a abrir, leer y finalmente llamar a cerrar, existe la posibilidad de que cada uno pueda devolver una indicación de error. Ahora, cómo la función diferenciará entre estos códigos de error en el valor que devuelve a su llamador.
Aquí la clase de excepción proporciona una solución para este problema. La clase de excepción proporciona información del paquete al programa o programador sobre un error en un objeto. El objeto de excepción se envía de vuelta a la pila de llamadas hasta que el sistema encuentra el código adecuado que sabe cómo manejar el error ocurrido.
Clase de excepción y su jerarquía
Es el paquete que contiene la información sobre la excepción en un objeto. Ruby contiene una jerarquía predefinida de excepciones como se muestra a continuación:
En el diagrama anterior, la mayoría de las excepciones pertenecen a la clase StandardError , que son las excepciones generales que surgen en el programa Ruby. Las excepciones restantes describen situaciones más graves, de menor nivel y menos recuperables, que los programas de Ruby no intentan manejar. Cuando un usuario quiere crear una excepción, puede usar una de las clases de excepción integradas. En Ruby, un usuario también puede crear su propia excepción, pero para eso, debe convertir esa excepción en una subclase de StandardError o una de sus clases secundarias. Si no lo definió en StandardError , la excepción no se detectaría de forma predeterminada. Cada excepción contiene una string de mensajes y un seguimiento de la pila.Entonces, si el usuario define su propia excepción, debe agregar esta información.
Ejemplo:
# Ruby program to illustrate the exception # taking two integer value $A = 14; $B = 0; # divide by zero error $C = $A / $B; puts "The Result is: #{$C}"
Error de tiempo de ejecución:
source_file.rb:10:in `/’: dividido por 0 (ZeroDivisionError)
de source_file.rb:10:in `
‘
Explicación: En el programa anterior, el usuario está tratando de dividir 14 entre 0. Así que aquí el compilador de Ruby lanzará una excepción como ZeroDivisionError .
Creación de excepciones definidas por el usuario: Ruby utiliza el método kernel denominado aumento para crear las excepciones que serán la instancia de la clase Exception o una de sus subclases. La cláusula de rescate se usa para manejar las excepciones creadas por raise.
Ejemplo:
# Ruby program to create the user defined exception # defining a method def raise_exception puts 'This is Before Exception Arise!' # using raise to create exception raise 'Exception Created' puts 'This is After Exception Arise -- Not Displayed' end # Calling the method raise_exception
Producción:
This is Before Exception Arise! source_file.rb:9:in `raise_exception': Exception Created (RuntimeError) from source_file.rb:15:in `'
Solución del código de ejemplo anterior:
# Ruby program to create the user # defined exception and rescued # defining a method def raise_and_rescue begin puts 'This is Before Exception Arise!' # using raise to create an exception raise 'Exception Created!' puts 'After Exception' # using Rescue method rescue puts 'Finally Saved!' end puts 'Outside from Begin Block!' end # calling method raise_and_rescue
Producción:
This is Before Exception Arise! Finally Saved! Outside from Begin Block!
Explicación: en el ejemplo anterior, la excepción se genera mediante el método de elevación (el método de elevación proviene directamente del módulo del núcleo) y el código se interrumpe debido a la presencia de una excepción. Ahora, esta excepción es manejada por la cláusula de rescate y el flujo del programa continúa sin errores después de la cláusula de rescate. Si un programa contiene más de una cláusula de rescate, si el primer código de rescate no puede manejar la excepción, la siguiente cláusula de rescate manejará la excepción.
Publicación traducida automáticamente
Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA