检查错误的首选方法

时间:2010-11-30 23:51:24

标签: language-agnostic exception error-handling

如果我想说,检查int是否在两个特定数字之间,是否更好地实现它而没有例外情况如下:

int a; //example in C++, but translate into your language of choice...
cin >> a;
if(a < 0 || a > 5)
    cout << "You must enter in a number between 0 and 5 inclusive!" << endl;

或者在try-catch块中有例外吗?

try
{
    int a;
    cin >> a;
    if(a < 0 || a > 5)
        throw "You must enter in a number between 0 and 5 inclusive!" << endl;
}
catch(string msg)
{
    cout << msg << endl;
}

3 个答案:

答案 0 :(得分:2)

两者都不是'更好'。如何处理异常情况,错误等完全取决于代码的确切情况和设计。 Try-catch块非常适用于错误导致以下代码被跳过的情况。另一方面,当你想让用户知道问题但仍然继续,比如假设一个默认值,那么try-catch可能不合适。

此外,某些程序设计有自定义错误处理代码,以便记录和记录错误和异常,并确保程序可以正常失败。如果你正在使用这种系统,你可能根本就不会使用'throw',而是使用类似的东西     ErrorHandler.logError(“出错了!”);

答案 1 :(得分:2)

问题是'函数能否决定如何处理错误/无效/越界输入?'。 如果可以,则不应该引发错误,否则引发错误。

'这是非常特别的吗?'。填满磁盘并导致文件系统错误的磁盘很难知道如何处理。糟糕的用户输入可能不那么罕见,可能可以通过常规代码处理。

异常是一种非常强大的工具,可以让代码重回正轨。但是,它们会破坏代码流,并使常规程序逻辑的可读性降低。

通常情况下,异常会影响调用者函数。在您给出的示例中,您会立即捕获自己的错误 - 因此没有多大意义抛出错误。您可以轻松地打印线并完成它。

在上面的示例中,似乎函数应该能够处理输入错误,因为它还要求数据并知道数据的边界。但这可能并非总是如此,也取决于设计和意图。

答案 2 :(得分:1)

取决于您的目标,并且取决于语言(您将其列为语言无关。)在C ++中,异常非常昂贵,因此您应该小心使用它们。我的规则是,如果错误是用户可见的,那么您可以使用异常。但是,很多人会不同意。基本上有许多不同的思想流派。

在我主要工作的C#世界中,异常非常便宜,因此可以更广泛地使用,用于更广泛的错误处理。

在您给出的特定示例中,它取决于可能导致错误的原因。如果是用户验证错误(似乎是),那么异常就是合适的。如果它是程序流程的正常部分,那么返回代码将更合适。