MDN will be in maintenance mode on Wednesday September 20th, starting at 10 AM Pacific / 5 PM UTC, for about 1 hour.

Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.

see the talk page - this probably should just be "try"

Resumen

La declaración try...catch marca un bloque de instrucciones para intentar (try), y especifica una respuesta si se produce una excepción (catch). 

Sintaxis

try {try_statements
}
[catch (exception_var_1 ifcondition_1) {catch_statements_1
}]
...
[catch (exception_var_2) {catch_statements_2
}]
[finally {finally_statements
}]
try_statements
Las sentencias que serán ejecutadas.
catch_statements_1, catch_statements_2
Sentencias que son ejecutadas si una excepción es lanzada en el bloque try.
exception_var_1, exception_var_2
Identificador que contiene un objeto de excepciones asociada a cada clausula catch.
condition_1
Una expresión condicional.
finally_statements
Sentencias que se ejecutan después de que se complete la declaración try . Estas sentencias se ejecutan independientemente de si una excepcion se ha lanzado o capturado.

Descripción

La sentencia de try consiste en un bloque try , esta contiene una o más instrucciones (se debe usar siempre {},  también para instrucciones de una línea), y al menos una clausula catch o una finally , o bien ambas. Es decir, hay tres formas de declarar un sintaxis de try:

  1. try...catch
  2. try...finally
  3. try...catch...finally

Una bloque catch contiene instruccioes que especifican que hacer si se genera una excepción en el bloque try . Es decir, usted quiere que el bloque try tenga éxito, pero si éste no tiene éxito, usted quiere que el control pase al bloque catch. Si cualquier sentencia dentro del bloque try (o una funcion llamada desde dentro del bloque try) lanza una excepción, el control cambia inmediatamente a la cláusula catch . Si ninguna excepcion es lanzada por el bloque try , la clausula catch se omite.

La cláusula finally se ejecuta despues del bloque try  y la(s) clausula(s) catch pero antes de las instrucciones que siguen a la sentencia try. Ésta siempre se ejecuta, independientemente de si se ha producido o no una excepción.

Puede anidar una o más sentencias try. Si una instrucción try interna no tiene una cláusula catch, se ejecuta la cláusula catch de la sentencia try anterior.

También se usa la instrucción try para manejar excepciones de JavaScript. Consulte la Guía de JavaScript para obtener mayor información sobre excepciones de JavaScript.
 

Cláusula incondicional catch

Cuando una sola cláusula incondicional catch es usada, el bloque catch es ejecutado cuando cualquier excepción es lanzada. Por ejemplo, cuando la excepción ocurre en el siguiente código, el control se transfiere a la cláusula catch.

try {
   throw "myException"; // genera una excepción
}
catch (e) {
   // sentencias para manejar cualquier excepción
   logMyErrors(e); // pasa el objeto de la excepción al manejador de errores
}

Cláusulas condicionales catch

No estándar
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

Usted también puede usar una o más cláusulas condicionales catch para manejar excepciones específicas. En este caso, la cláusula catch apropiada es ejecutada cuando la excepción específica es lanzada. En el siguiente ejemplo, el código en el bloque try puede potencialmente lanzar tres excepciones TypeError, RangeError, y EvalError. Cuando una excepción ocurre, el control se transfiere a la cláusula catch apropiada. Si la excepción no es una de las excepciones especificadas y una cláusula catch incondicional es encontrada, el control se transfiere a esa cláusula catch.

Si usted usa una cláusula catch incondicional con una o más cláusulas catch condicionales, la cláusula catch incondicional debe ser especificada al último. De otra forma, la cláusula catch incondicional interceptará todo tipo de excepciones antes de que puedan alcanzar las condicionales.

Recordatorio: ésta funcionalidad no es parte de la especificación ECMAScript.

try {
   myroutine(); // puede lanzar tres tipos de excepciones
} catch (e if e instanceof TypeError) {
   // instrucciones para manejar excepciones TypeError
} catch (e if e instanceof RangeError) {
   // instrucciones para manejar excepciones RangeError
} catch (e if e instanceof EvalError) {
   // instrucciones para manejar excepciones EvalError
} catch (e) {
   // instrucciones para manejar cualquier excepción no especificada
   logMyErrors(e); // pasa el objeto de la excepción al manejador de errores
}

Y aquí está cómo implementar las mismas "Cláusulas catch condicionales" usando sólo JavaScript simple conforme a la especificación ECMAScript (obviamente es más verboso, pero funciona en cualquier parte):

try {
    // puede lanzar tres tipos de excepciones
    myroutine();  
} catch (e) {
    if (e instanceof TypeError) {
        // instrucciones para manejar excepciones TypeError
    } else if (e instanceof RangeError) {
        // instrucciones para manejar excepciones RangeError
    } else if (e instanceof EvalError) {
        // instrucciones para manejar excepciones EvalError
    } else {
       // instrucciones para manejar cualquier excepción no especificada
       logMyErrors(e); // pasa el objeto de la excepción al manejador de errores
}

El identificador de excepciones

Cuando una excepción es lanzada en el bloque try, exception_var (por ejemplo, la e en catch (e)) guarda el valor especificado por la expresión throw. Usted puede usar éste identificador para obtener información acerca de la excepción que fue lanzada.

Éste identificador es local en la cláusula catch. Significa que, es creado cuando la cláusula catch es ejecutada, y después de que termine de ejecutarse, el identificador no estará disponible.

La cláusula finally

La cláusula finally contiene instrucciones para ejecutarse después del bloque try y catch, pero antes de las instrucciones que le siguen a la expresión try. La cláusula finally se ejecuta a pesar de ser lanzada o no una excepción. Si una excepción es lanzada, las instrucciones en la cláusula finally se ejecutan incluso si la cláusula catch no maneja la excepción.

Usted puede usar la cláusula finally para hacer que su script falle plácidamente cuando una excepción ocurra; por ejemplo, usted puede necesitar liberar un recurso que su script retiene. El siguiente ejemplo abre un archivo y despues ejecuta instrucciones que usan el archivo (JavaScript del lado del servidor permite acceder a archivos). Si una excepción es lanzada mientras el archivo está abierto, la cláusula finally cierra el archivo antes de que el script falle.

openMyFile()
try {
   // retiene un recurso
   writeMyFile(theData);
}
finally {
   closeMyFile(); // siempre cierra el recurso
}

Ejemplos

Vea los ejemplos para throw.

Vea también

Etiquetas y colaboradores del documento

 Última actualización por: ManuelRubio,