Se puede utilizar una de las clases Exceiption integradas o puedes crear una propia.
Si creas una propia, puede que quieras que sea una subclase de StandardError o de sus hijos. Si no, no será capturada por defecto.

Cada Excepction tiene asociada una cadena de mensaje y un trazado de pila.
nombre_fichero = "prueba.txt"
fichero = File.open(nombre_fichero,"w")
begin
while data = socket.read(512)
fichero.write(datos)
end
rescue SystemCallError
$stderr.print "IO failed: " + $!
fichero.close
File.delete(nombre_fichero)
raise
end
Se pueden tener carias clausulas recue en un bloque begin.
Cada clausula rescue puede especificar múltiples excepciones a capturar.
begin eval string rescue SyntaxError, NameError => errorCompilacion print "String no compila:"+ errorCompilacion rescue StandardError => error print "Error al arrancar el script:"+error end
Realizar una Acción al Finalizar un Bloque salte o no una Excepción
ensure va después de la ultima clausula rescue y contiene un trozo de código que se ejecuta siempre cuando termina un bloque.
No importa si se cierra el bloque con normalidad o si termina por una excepción no capturada.
fichero = File.open("prueba.txt")
begin
#....
rescue
#....
ensure
fichero.close unless fichero.nil?
end
Se puede utilizar la instrucción retry dentro una de una clausula rescue para repetir todo el bloque begin/end.
Ejemplo:
- Se intenta iniciar conexión con el puerto 8000,
- Si salta una excepción, cambia el booleano de puerto por defecto a false, y vuelve a ejecutar la función,
- Se intenta iniciar conexión con el puerto 8080
- Si salta una excepción, se lanza una excepción al llamador con el raise.
@puerto_defecto = true
begin
if @puerto_defecto then
@conexion.iniciar(8000)
else
@conexion.iniciar(8080)
end
rescue ProtocolError
if @puerto_defecto then
@puerto_defecto = false
retry
else
raise
end
end
LANZAR EXCEPCIONES
raise –> Relanza la excepcion actual o un RuntimeError si no es la excepcion en curso)
raise «Mala codificacion» –> Crea una nueva excepcion RuntimeError, estableciendo su mensaje a la cadena dada.
raise InterfaceException, «Fallo del teclado», caller –>
- 1º argumento crea una excepcion con ese nombre, normalmente el nombre de una clase de la jerarquia Exception.
- 2º argumento mensaje asociado a la excepcion,
- 3º argumento trazado de la pila
Catch y Throw
