2010-11-30 105 views
1
的首选方式

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

或者在尝试异常 - 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; 
} 
+1

我至少会改变它为`if((unsigned)a> 5)`方式。 ;-) – 2010-12-01 05:14:54

回答

2

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

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

1

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

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

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

2

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

'这是什么特殊的?'。填满磁盘并导致文件系统错误的磁盘很难知道如何处理。不好的用户输入可能不是那么不寻常,可以通过常规代码来处理。

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

通常情况下,一个异常会传递给调用者函数。在你给出的例子中,你立即发现了你自己的错误 - 所以没有太多的意见可以抛出错误。您可以轻松地打印该行并完成它。

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