Попытка/выгода JavaScript: ошибки или исключения?

Хорошо. Я могу крохоборствовать здесь, но мой код не последователен, и я хотел бы сделать его так. Но прежде чем я делаю, я хочу удостовериться, что я иду правильным путем. На практике это не имеет значения, но это беспокоило меня некоторое время, таким образом, я полагал, что спрошу своих коллег...

Каждый раз я использую a try... catch оператор, в блоке выгоды я всегда регистрирую сообщение к своей внутренней консоли. Однако мои сообщения журнала не последовательны. Они любой похож:

catch(err) {
DFTools.console.log("someMethod caught an error: ",err.message);
...

или:

catch(ex) {
DFTools.console.log("someMethod caught an exception: ",ex.message);
...

Очевидно, код функционирует правильно так или иначе, но он начинает беспокоить меня, что я иногда обращаюсь к "ошибкам" и иногда к "исключениям". Как я сказал, возможно, я крохоборствую, но который является надлежащей терминологией? "Исключение" или "Ошибка"?

11
задан Josh 6 April 2010 в 19:39
поделиться

5 ответов

Это немного субъективно, но для меня ошибка - это когда кто-то или что-то делает что-то неправильное, неподходящее или недействительное. Это может быть синтаксическая ошибка, логическая ошибка, ошибка чтения, ошибка пользователя или даже социальная ошибка. Это абстрактное понятие.

Исключение, с другой стороны, - это объект, который создается и выбрасывается, когда в коде возникает определенное условие. Оно может соответствовать или не соответствовать концептуальной ошибке. Поэтому, на мой взгляд, правильная номенклатура - это "исключение".

11
ответ дан 3 December 2019 в 06:45
поделиться

В JavaScript это называется перехватом ошибок. Поэтому я бы посоветовал вам использовать ошибку вместо исключения. Оставьте выбор посередине, используя "e". Как в примерах Mozilla. Ссылка на Mozilla Core JavaScript 1.5

1
ответ дан 3 December 2019 в 06:45
поделиться

То, что вы получаете в блоке Catch - это исключение, поэтому я называю это исключением...

Если это ошибка - я могу обработать ее в своем коде и обычно не ожидаю увидеть ее в блоке Catch

HTH.

0
ответ дан 3 December 2019 в 06:45
поделиться

Спецификация ECMAScript называет их исключениями. Возможно, вы захотите поступить аналогичным образом.

Для повышения информативности вашего лога:

catch(ex) {
    DFTools.console.log("someMethod caught an exception of type " 
       + ex.name + ": ", ex.message);

Возможно, вы также захотите учесть, что исключения (к сожалению) могут быть любого типа, и поэтому не обязательно имеют свойства name и message:

catch(ex) {
    if (ex.message && ex.name) {        
        DFTools.console.log("someMethod caught an exception of type " 
           + ex.name + ": ", ex.message);
    } else /* deal with it somehow */

Поскольку это начинает выглядеть довольно громоздко, чтобы повторять это везде, вы, возможно, захотите отразить это в функции:

function logExceptions(methodName, action) {

    try {

        action();

    } catch (ex) {
        if (ex.message && ex.name) {        
            DFTools.console.log("someMethod caught an exception of type " 
               + ex.name + ": ", ex.message);
        } else {
            DFTools.console.log("someMethod caught a poorly-typed exception: " + ex);
        }
    }
}

Теперь вы можете сказать:

logExceptions(function() {

    // do some risky stuff...

});
4
ответ дан 3 December 2019 в 06:45
поделиться

Исключение можно ожидать, например, при попытке открыть файл может возникнуть исключение «Файл не найден». С другой стороны, ошибки - это то, чего вы не можете увидеть, например, переполнение стека или недостаток памяти.

Исключение - это альтернативный логический выход из функции, не дающий логического результата. Исключение также позволяет лучше объяснить, что произошло, почему оно существует таким образом. Для открытия файла, опять же, дескриптор файла является логическим результатом, и если файл не существует (одно возможное исключение) или это папка, а не файл (другое возможное исключение).

1
ответ дан 3 December 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: