try..catch..finally

Disponibilidad

Flash Player 7.

Sintaxis

try {
  // ... bloque try ...
} finally {
  // ... bloque finally ...
}
try {
  // ... bloque try ...
} catch(error[:ErrorType1]) {
  // ... bloque catch ...
} [catch(error[:ErrorTypeN]) {
  // ... bloque catch ...
}] [finally {
  // ... bloque finally ...
}]

Parámetros

error Expresión emitida desde una sentencia throw, que generalmente es una instancia de la clase Error o una subclase de la misma.

ErrorType Especificador de tipo opcional para el identificador error. La cláusula catch sólo detecta errores del tipo especificado.

Descripción

Palabras clave; incluya un bloque de código en el que pueda producirse un error y, a continuación, responda al error. Si el código del bloque try emite un error (utilizando la acción throw), el control pasa al bloque catch, si existe, y, a continuación, al bloque finally, si existe. El bloque finally siempre se ejecuta, independientemente de que se emita un error o no. Si el código del bloque try no emite un error (es decir, el bloque try finaliza correctamente), se ejecuta el código del bloque finally. El bloque finally se ejecuta aun cuando el bloque try salga utilizando una sentencia return.

Un bloque try debe ir seguido por un bloque catch, un bloque finally o ambos. Un mismo bloque try puede tener varios bloques catch, pero sólo un bloque finally. Puede anidar bloques try en tantos niveles de profundidad como desee.

El parámetro error especificado en un controlador catch debe ser un identificador simple como e, theException o x. La variable de un controlador catch también puede ser typed. Cuando se utilizan con varios bloques catch, los errores de tipo permiten detectar varios tipos de errores emitidos desde un mismo bloque try.

Si la excepción emitida es un objeto, el tipo coincidirá si el objeto emitido es una subclase del tipo especificado. Si se emite un error de un tipo específico, se ejecuta el bloque catch que controla el error correspondiente. Si se emite una excepción que no es del tipo especificado, el bloque catch no se ejecuta y la excepción se emite automáticamente desde el bloque try a un controlador catch del mismo tipo.

Si se emite un error desde una función y ésta no incluye un controlador catch, el intérprete de ActionScript sale de dicha función y de todas las funciones de llamada hasta que se encuentre un bloque catch. Durante este proceso, se llama a los controladores finally en todos los niveles.

Ejemplo

En este ejemplo se muestra cómo crear una sentencia try..finally. Puesto que el código del bloque finally se ejecutará de todos modos, generalmente se utiliza para ejecutar el código de "limpieza" necesario tras ejecutar un bloque try. En este ejemplo, el bloque finally se utiliza para eliminar un objeto ActionScript, independientemente de si se ha producido un error.

var account = new Account()
try {
  var returnVal = account.getAccountInfo();
  if(returnVal != 0) {
    throw new Error("Error al obtener información sobre la cuenta.");
  }
}
finally {
  // Eliminar el objeto 'account' en cualquier circunstancia.
  if(account != null) {
    delete account;
  }
}

En este ejemplo se muestra el funcionamiento de una sentencia try..catch. Se ejecuta el código del bloque try. Si algún código del bloque try emite una excepción, el control pasa al bloque catch, que muestra el mensaje de error en un campo de texto utilizando el método Error.toString().

var account = new Account()
try {
  var returnVal = account.getAccountInfo();
  if(returnVal != 0) {
    throw new Error("Error al obtener información sobre la cuenta.");
  }
} catch (e) {
  status_txt.text = e.toString();
}

En este ejemplo se muestra un bloque de código try con varios bloques de código catch de tipo. En función del tipo de error que se produzca, el bloque de código try emitirá un tipo de objeto distinto. En este caso, myRecordSet es una instancia de una clase (hipotética) denominada RecordSet cuyo método sortRows() puede emitir dos tipos de error distintos: RecordSetException y MalformedRecord.

En este ejemplo, los objetos RecordSetException y MalformedRecord son subclases de la clase Error. Cada una está definida en su propio archivo de clase AS. Para más información, consulte Creación de clases con ActionScript 2.0.

// En RecordSetException.as:
class RecordSetException extends Error {
  var message = "Excepción de registro."
}
// In MalformedRecord.as:
class MalformedRecord extends Error {
  var message = "Excepción de registro incorrecto.";
}

En el método sortRows() de la clase RecordSet, se emite uno de los objetos de error definidos anteriormente en función del tipo de excepción que se haya producido. En el fragmento de código siguiente se muestra cuál podría ser el aspecto de este código.

// En el archivo de clase RecordSet.as...
function sortRows() {
  ...
  if(recordSetErrorCondition) {
    throw new RecordSetException();
  }
  if(malFormedRecordCondition) {
    throw new MalformedRecord();
  }
  ...
}  

Por último, en otro archivo AS o script FLA, el código siguiente invoca el método sortRows() o una instancia de la clase RecordSet. Define bloques catch para cada tipo de error que emite sortRows().

try {
  myRecordSet.sortRows();
} catch (e:RecordSetException) {
  trace("Caught a recordset exception");
} catch (e:MalformedRecord) {
  trace("Caught a malformed record exception");
}

Véase también

Clase Error, throw, class, extends