Manejar y generar excepciones en Javascript

Los que hemos trabajado con Java estamos acostumbrados a tratar y lanzar excepciones para controlar los errores, algo que en Javascript no es muy común, pero en librerías algo elaboradas podría ser muy útil.

// Clases de errores
function DivisionByZeroError() {
    this.name = "DivisionByZeroError";
}
function DivisionByStringError() {
    this.name = "DivisionByStringError";
}
// Funcion que devuelve un error
function divisionCanFail(a, b) {
    if (b == 0) {
        throw new DivisionByZeroError();
    }
    if (typeof b == "string") {
        throw new DivisionByStringError();
    }
    return a / b;
}
// Funcion de test
function decoratedDivision(a, b) {
    try {
        alert(divisionCanFail(a, b));
    } catch (error if (error.name == "DivisionByZeroError")) {
        alert("A division by zero...");
        alert("Exception class: " + error.name);
    } catch (error if (error.name == "DivisionByStringError")) {
        alert("Exception class: " + error.name);
    }
}

decoratedDivision(5, "isThisANumber?!");
decoratedDivision(5, 0);

Exceptional JavaScript

Transformar los errores en excepciones en PHP

Lo que más me gusta en Java es el tratamiento de los errores mediante excepciones, en PHP no está tan logrado, pero se puede apañar para que tenga un funcionamiento parecido:

set_error_handler('error_handler');
function error_handler($errno, $errstr, $errfile, $errline) {
if (4096 == $errno) throw new Exception($errstr);
return false;
}

El código 4096 indica que el error es capturable, se produce un error pero no produce un situación inestable.

Después podremos capturar los errores de la siguiente manera:

try {
// Operación que produce error
} catch (ErrorException $e) {
// Tratar el error
}

Turning errors into exceptions