La Estructura Try

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

Diseño y Realización de Servicios de Presentación en Entornos Gráficos – 2º D.A.I.

La estructura Try...End Try


Esta estructura de control del lenguaje, proporciona el medio para
definir un bloque de código sensible a errores, y los correspondientes
manipuladores de excepciones, en función del tipo de error producido.
El Código fuente 391 muestra su sintaxis.
Try
' código que puede provocar errores
' ....
' ....
[Catch [Excepcion [As TipoExcepcionA]] [When Expresión]
' respuesta a error de tipo A
' ....
' ....
[Exit Try]
]
[Catch [Excepcion [As TipoExcepcionN]] [When Expresión]
' respuesta a error de tipo N
' ....
' ....
[Exit Try]
]
[Finally
' código posterior al control de errores
' ....
' ....
]
End Try
Código fuente 391

Analicemos con detalle los principales elementos de esta estructura.


En primer lugar nos encontramos con su declaración mediante la
palabra clave Try. Todo el código que escribimos a partir de dicha
palabra clave, y hasta la primera sentencia Catch, es el código que
definimos como sensible a errores, o dicho de otro modo, el bloque de
instrucciones sobre las que deseamos que se active el control de errores
cuando se produzca algún fallo en su ejecución.
A continuación, establecemos cada uno de los manipuladores de
excepción mediante la palabra clave Catch. Junto a esta palabra
clave, situaremos de forma opcional, un identificador que contendrá el
objeto con la excepción generada. Finalmente, y también de modo
opcional, con la palabra clave When, especificaremos una condición
para la captura del objeto de excepción. Podemos escribir uno o varios
manipuladores Catch dentro de una estructura de control Try...End Try.
Cada vez que se produzca un error, el flujo de la ejecución saltará a la
sentencia Catch más acorde con el tipo de excepción generada por el
error, siempre y cuando hayamos situado varios manipuladores de
excepciones en el controlador de errores. Tal y como acaba de ver el
lector en la sintaxis de la estructura Try...End Try, es posible utilizar Match
de un modo genérico, es decir, sin establecer qué tipo de excepción se
ha producido. Este es el tipo de control de errores más sencillo que
podemos implementar, aunque también el más limitado, ya que sólo
Diseño y Realización de Servicios de Presentación en Entornos Gráficos – 2º D.A.I.

podemos tener un manipulador de excepciones. Veamos un ejemplo


en el Código fuente 392.
Public Sub Main()
Dim sValor As String
Dim iNumero As Integer
Try
' comienza el control de errores
Console.WriteLine("Introducir un número")
sValor = Console.ReadLine()
' si no hemos introducido un número...
iNumero = sValor ' ...aquí se producirá un error...
' ...y no llegaremos a esta parte del código
iNumero = iNumero + 1000
Catch
' si se produce un error, se genera una excepción
' que capturamos en este bloque de código
' manipulador de excepción, definido por Catch
Console.WriteLine("Error al introducir el número" & _
ControlChars.CrLf & _
"El valor {0} es incorrecto", _
sValor)
End Try
' resto del código del procedimiento
' ....
Console.ReadLine()
End Sub
Código fuente 392

Tanto si se produce un error como si no, la sentencia Finally de la


estructura Try...End Try, nos permite escribir un bloque de código que
será ejecutado al darse una condición de error, o bajo ejecución
normal del procedimiento. El Código fuente 393 muestra el mismo
ejemplo anterior, pero introduciendo un bloque Finally. Pruebe el lector
alternativamente, a forzar un error, y a ejecutar sin errores este fuente;
en ambos casos verá que el bloque Finally es ejecutado. Para
completar el ejemplo, tras la estructura Try...End Try se han escrito varias
líneas de código potencialmente problemáticas; en el caso de que se
produzca un error, la ejecución será cancelada, al no estar dichas líneas
situadas en un controlador de errores.
Public Sub Main()
Dim sValor As String
Dim iNumero As Integer
Try
' comienza el control de errores
Console.WriteLine("Introducir un número")
sValor = Console.ReadLine()
' si no hemos introducido un número...
iNumero = sValor ' ...aquí se producirá un error...
' ...y no llegaremos a esta parte del código
iNumero = iNumero + 1000
Catch
' si se produce un error, se genera una excepción
' que capturamos en este bloque de código
Diseño y Realización de Servicios de Presentación en Entornos Gráficos – 2º D.A.I.

' manipulador de excepción, definido por Catch


Console.WriteLine("Error al introducir el número" & _
ControlChars.CrLf & _
"El valor {0} es incorrecto", _
sValor)
Finally
' si se produce un error, después de Catch se ejecuta este
bloque;
' si no se produce error, después de Try también se ejecuta
Console.WriteLine("El controlador de errores ha
finalizado")
End Try
' resto del código del procedimiento
Dim dtFecha As Date
Console.WriteLine("Introducir una fecha")
' si ahora se produce un error,
' al no disponer de una estructura para controlarlo
' se cancelará la ejecución
dtFecha = Console.ReadLine()
Console.WriteLine("La fecha es {0}", dtFecha)
Console.ReadLine()
End Sub
Código fuente 393

La clase Exception
Como hemos explicado en anteriores apartados, cada vez que se
produce un error, el entorno de ejecución genera una excepción con la
información del error acaecido.
Para facilitarnos la tarea de manipulación de la excepción producida,
en un controlador de excepciones obtenemos un objeto de la clase
Exception, o de alguna de sus derivadas, de forma que, a través de sus
miembros, podemos saber qué ha pasado. Entre las propiedades y
métodos que podemos utilizar, se encuentran las siguientes.
 Message. Descripción del error.
 Source. Nombre del objeto o aplicación que provocó el error.
 StackTrace. Ruta o traza del código en la que se produjo el error.
 ToString( ). Devuelve una cadena con información detallada del
error. En esta cadena podemos encontrar también, los valores
obtenidos de las propiedades anteriores; por lo que el uso de este
método, en muchas ocasiones será el modo más recomendable
para obtener los datos de la excepción.

Podemos obtener el objeto de excepción creado a partir de un error,


utilizando la sentencia Catch de la estructura Try. Para ello, a
continuación de Catch, escribimos el nombre de un identificador,
definiéndolo como tipo Exception o alguno de los tipos de su jerarquía.
El Código fuente 394 muestra la captura de la excepción en el ejemplo
anterior, dentro de la sentencia Catch, pero en este caso utilizando un
objeto Exception. El resto del código es igual que el anterior ejemplo.
' ....
Try
' ....
Diseño y Realización de Servicios de Presentación en Entornos Gráficos – 2º D.A.I.

' ....
Catch oExcep As Exception
' si se produce un error, se crea un objeto excepción
' que capturamos volcándolo a un identificador
' de tipo Exception
Console.WriteLine("Se produjo un error. Información de la
excepción")
Console.WriteLine("========================================
========")
Console.WriteLine("Message: {0}", oExcep.Message)
Console.WriteLine()
Console.WriteLine("Source: {0}", oExcep.Source)
Console.WriteLine()
Console.WriteLine("StackTrace: {0}", oExcep.StackTrace)
Console.WriteLine()
Console.WriteLine(oExcep.ToString())
Finally
' ....
' ....
End Try
' ....
Código fuente 394

También podría gustarte