Language agnostic 检查错误的首选方法

Language agnostic 检查错误的首选方法,language-agnostic,exception,error-handling,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; 或者在

如果我想说,检查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;
}

两者都不是“更好”。如何处理异常情况、错误等完全取决于具体情况和代码设计。当错误导致跳过以下代码时,Try-catch块非常有用。另一方面,当您想让用户知道问题,但通过假设默认值继续时,try-catch可能不合适

此外,一些程序设计有自定义错误处理代码,以便记录错误和异常,并确保程序正常失败。如果您使用的是这种系统,那么您可能根本不用“throw”,而是类似于
ErrorHandler.logerror出了什么问题

两者都不是“更好”。如何处理异常情况、错误等完全取决于具体情况和代码设计。当错误导致跳过以下代码时,Try-catch块非常有用。另一方面,当您想让用户知道问题,但通过假设默认值继续时,try-catch可能不合适

此外,一些程序设计有自定义错误处理代码,以便记录错误和异常,并确保程序正常失败。如果您使用的是这种系统,那么您可能根本不用“throw”,而是类似于
ErrorHandler.logerror出了什么问题

取决于您的目标,也取决于您将此列为不可知语言的语言。在C++中,异常非常昂贵,所以你应该小心使用它们。我的规则是,如果错误是用户可见的,那么可以使用异常。然而,许多人会不同意。基本上有许多不同的学派

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


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

取决于您的目标,以及您将其列为不可知语言的语言。在C++中,异常非常昂贵,所以你应该小心使用它们。我的规则是,如果错误是用户可见的,那么可以使用异常。然而,许多人会不同意。基本上有许多不同的学派

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

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

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

“这有什么特别的吗?”。磁盘填满并导致文件系统错误可能很难处理。错误的用户输入可能并不罕见,可能可以通过常规代码处理

异常是让代码回到正轨的一个极其强大的工具。但是,它们会破坏代码流,并会降低常规程序逻辑的可读性

通常情况下,调用方函数会出现异常。在您给出的示例中,您会立即捕获自己的错误-因此抛出错误没有多大意义。你可以很容易地打印出这行代码,并完成它

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

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

“这有什么特别的吗?”。磁盘填满并导致文件系统错误可能很难处理。错误的用户输入可能并不罕见,可能可以通过常规代码处理

异常是让代码回到正轨的一个极其强大的工具。但是,它们会破坏代码流,并会降低常规程序逻辑的可读性

通常情况下,调用方函数会出现异常。在您给出的示例中,您会立即发现自己的错误,因此没有太多的理由 一个错误。你可以很容易地打印出这行代码,并完成它


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

无论哪种方式,我至少会将其更改为if unsigneda>5-@R不知道我是否做错了,但不幸的是你的方法似乎不起作用?发生了什么?4294967291大于5,因此条件将捕获-5作为超出范围,就像它应该捕获的一样。@R。。哦,是的,哈哈,愚蠢的我。。。非常感谢,这段代码将节省我大量的打字!无论哪种方式,我至少都会将其更改为大于5-@R不知道我是否做错了,但不幸的是你的方法似乎不起作用?发生了什么?4294967291大于5,因此条件将捕获-5作为超出范围,就像它应该捕获的一样。@R。。哦,是的,哈哈,愚蠢的我。。。非常感谢,这段代码将节省我大量的打字!