Академический Документы
Профессиональный Документы
Культура Документы
Cuando ocurre un error en un programa, se produce una excepcin, lo que significa que
crea un objeto excepcin y situa el puntero de la pila en el primer punto donde se ha
provocado la excepcin. El objeto excepcin contiene informacin sobre todo lo que ha
ocurrido.
Esto nos permite crear aplicaciones ms robustas ya que se puede llegar a averiguar el lugar
en concreto donde se ha producido el error, particularmente en reas donde los errores
puedan causar la perdida de datos y recursos del sistema.
Cuando creamos una respuesta a la excepcin tenemos que hacerlo en dentro de bloques de
cdigo, los cuales se llaman bloques de cdigo protegidos.
Los bloques de cdigo protegidos comienzan con la palabra reservada try. Si ocurre algn
error dentro del bloque de cdigo protegido, el tratamiento del error se introduce en un
bloque de cdigo que comienza con except.
Vamos a ver un ejemplo que provoca una excepcin al abrir un archivo que no existe:
var
F: TextFile;
begin
AssignFile( F, 'c:\nosexiste.txt' );
try
Reset( F );
except
on E: Exception do
Application.MessageBox( PChar( E.Message ), 'Error', MB_ICONSTOP );
end;
end;
La primera parte de un bloque protegido comienza con la palabra try. El bloque try
contiene el cdigo que potencialmente puede provocar la excepcin. Al provocar la
excepcin saltar directamente al comienzo del bloque de cdigo que comienza con la
palabra reservada except.
Como puede apreciarse en el cdigo anterior hemos creado un objeto E que representa la
excepcin creada. El objeto E pertenece a la clase Exception que a su vez hereda
directamente de la clase TObject. Este objeto contiene propiedades y mtodos para
manejar la excepcin provocada.
Nosotros tambin podemos crear nuestras propias excepciones que hereden de la clase
Exception. Por ejemplo, voy a crear una excepcin si una variable de tipo string est vaca.
Primero defino el tipo especial de excepcin:
type
ECadenaVacia = class( Exception );
var
sCadena: String;
begin
if sCadena = '' then
raise ECadenaVacia.Create( 'Cadena vacia.' );
end;
El comando raise provoca a propsito la excepcin para detener la ejecucin del programa.
No es necesario que creemos nuestros tipos de excepcin. Tambin poda haber sido as:
EXCEPCIONES ANIDADAS
var
F: TextFile;
begin
AssignFile( F, 'C:\noexiste.txt' );
try
Reset( F );
try
CloseFile( F );
except
on E: Exception do
ShowMessage( 'Excepcin 2: ' + E.Message );
end;
except
on E: Exception do
ShowMessage( 'Excepcin 1: ' + E.Message );
end;
end;
En este ejemplo hemos metido un bloque protegido dentro de otro, donde cada uno controla
su propia excepcin. En este caso provocara la excepcin 1 ya que el archivo no existe.
DETENIENDO LA EXCEPCION
Cuando se provoca una excepcin, una vez la hemos procesado con la sentencia on E:
Exception, la ejecucin continua hacia el siguiente bloque de cdigo. Si queremos detener
la ejecucin del programa debemos utilizar el comando raise:
var
F: TextFile;
begin
AssignFile( F, 'C:\noexiste.txt' );
ShowMessage( '1' );
try
Reset( F );
except
on E: Exception do
raise;
end;
ShowMessage( '2' );
end;
En este ejemplo nunca llegara a ejecutarse el segundo ShowMessage ya que raise detiene
la ejecucin del procedimiento.
De este modo se controla la excepcin y el usuario no ve nada en pantalla.
Con esto finalizamos el tratamiento de excepciones en Delphi.