Try、Catch、Finally 中抛出异常 VS 返回错误

Hug*_*are 4 exception try-catch try-catch-finally

我很确定我已经知道答案,但我仍然很好奇在 Try、Catch、Finally 块中处理错误的意见是什么 -但是当您重复自己时。

顺便说一句 - 我不是在谈论用户输入 - 而是使用它作为示例,因为它清晰且简短

考虑这段代码...

try {    
    if (success) {
        return someSuccessMessage;
    }
    else {
        logError("User input not correct format");
        return someErrorMessage; // repeats itself
    }
}
catch (Exception ex) {
    logError(ex.Message);
    return someErrorMessage; // repeats itself
}
Run Code Online (Sandbox Code Playgroud)

假设我们有一个函数,如果它失败了,我们想返回一条错误消息,因为异常是无关紧要的——我们的函数没有成功,用户不需要任何额外的细节。

我一直坚信,如果你能处理错误,就避免异常——因为它不再是异常了,但我想知道关于避免重复自己的意见......你可以执行以下操作来避免重复你自己...

try {    
    if (success) {
        return someSuccessMessage;
    }
    else {
        throw new Exception("User input not correct format");
    }
}
catch (Exception ex) {
    logError(ex.Message);
    return someErrorMessage;
}
Run Code Online (Sandbox Code Playgroud)

这不是最好的例子,但为了简洁起见,我想说明重复代码的要点。

众所周知,异常会导致性能损失,但是对于这种情况有何想法呢?

Adr*_*ong 5

IMO,仅当超出可纠正情况时才应抛出异常。用户输入不正确的格式是已知的,不应抛出任何异常。

将异常视为灾难性的(数据中心着火、地震等)。这样,您将看到处理“常规错误”和“异常”之间的区别。

是的,抛出和捕获异常会消耗大量性能,最好是避免它们。