Exception 作为控制机制的例外

Exception 作为控制机制的例外,exception,language-design,Exception,Language Design,我在读这篇文章时笑了 在我的一个应用程序中,我不使用File.Exist,即使我希望文件在很多时候都存在。我尝试创建一个文件而不覆盖旧的文件,如果失败,我将重命名为Filename(try Number).ext并循环,直到它打开 我应该使用File.Exist吗?或者我应该继续尝试打开一个文件,循环直到写入模式吗?我会重新开始检查file.Exist,否则异常路径的性能会非常昂贵。我会重新开始检查file.Exist,否则,异常路径可能会导致非常高的性能代价。这个问题被称为LBYL vs.EA

我在读这篇文章时笑了

在我的一个应用程序中,我不使用File.Exist,即使我希望文件在很多时候都存在。我尝试创建一个文件而不覆盖旧的文件,如果失败,我将重命名为Filename(try Number).ext并循环,直到它打开


我应该使用File.Exist吗?或者我应该继续尝试打开一个文件,循环直到写入模式吗?

我会重新开始检查file.Exist,否则异常路径的性能会非常昂贵。

我会重新开始检查file.Exist,否则,异常路径可能会导致非常高的性能代价。

这个问题被称为LBYL vs.EAFP:三思而后行vs.请求原谅比请求许可更容易。有。

这个问题被称为LBYL vs.EAFP:三思而后行vs.请求原谅比允许更容易。有。

例外情况适用于例外情况


你所需要的只是一个测试;没有什么例外,所以使用if File.Exist。

例外适用于例外情况

你所需要的只是一个测试;这并没有什么特别之处,所以请使用if File.Exist。

我现在把“例外情况下的例外”这件事放在一边,简单地分析一下你的情况,以便说服你它是正确的,你应该只在例外情况下使用例外

就你而言,你似乎是这样做的

while (!opened) { 
   try {
       <file_open>;
       opened = true
   } catch (exception) {
       //ignore
   }
}
当(!打开){
试一试{
;
打开=真
}捕获(例外){
//忽略
}
}
你会很容易地吃掉所有的CPU时间。如果你这样做

while (!opened) { 
   if (file.exists) {
       <file_open>
       opened = true
   } else {
       Thread.sleep(<some_time>);
   }
}
当(!打开){
如果(file.exists){
打开=真
}否则{
Thread.sleep();
}
}
你会玩得很好,把你未使用的时间给其他进程,并将CPU保持在最低限度

所以在我看来,我认为首先测试是一个非常好的主意

我暂时把“例外情况下的例外”这件事放在一边,简单地分析一下你的情况,以便说服你这是正确的,你应该只在例外情况下使用例外

就你而言,你似乎是这样做的

while (!opened) { 
   try {
       <file_open>;
       opened = true
   } catch (exception) {
       //ignore
   }
}
当(!打开){
试一试{
;
打开=真
}捕获(例外){
//忽略
}
}
你会很容易地吃掉所有的CPU时间。如果你这样做

while (!opened) { 
   if (file.exists) {
       <file_open>
       opened = true
   } else {
       Thread.sleep(<some_time>);
   }
}
当(!打开){
如果(file.exists){
打开=真
}否则{
Thread.sleep();
}
}
你会玩得很好,把你未使用的时间给其他进程,并将CPU保持在最低限度


所以在我看来,我认为首先测试是一个非常好的主意

在我看来,例外情况通常应保留在真正例外的情况下,原因如下:

  • 异常有很高的性能开销(尽管在处理文件时这可能不是问题)
  • 让应用程序承受大量异常会使调试变得非常困难
    • 你可能会接受你在某处寻找的例外情况
    • 这会使其他人很难遵循programmflow,特别是在调用层次结构中捕捉到更高级别的异常时

  • 当然,在您的特定情况下,依赖异常可能是有意义的,因为事先检查
    File.Exitsts()
    并不能保证文件在被访问时存在,因此,无论如何,您可能必须将例外情况包括在内。我认为,例外情况通常应保留在真正例外的情况下,原因如下:

  • 异常有很高的性能开销(尽管在处理文件时这可能不是问题)
  • 让应用程序承受大量异常会使调试变得非常困难
    • 你可能会接受你在某处寻找的例外情况
    • 这会使其他人很难遵循programmflow,特别是在调用层次结构中捕捉到更高级别的异常时

  • 当然,在您的特定情况下,依赖异常可能是有意义的,因为事先检查
    File.Exitsts()
    并不能保证文件在被访问时存在,因此您可能必须包括异常情况

    性能并不总是有异常的问题,取决于语言和O/S。打开文件也可能是代码的非关键部分。好的,我同意,但我发现自己是一个防御性程序员。我宁愿相信我的代码的用户不太确定他们在做什么。性能并不总是一个例外的问题,取决于语言和O/S。打开文件也可能是代码的非关键部分。好吧,我同意,但我发现自己是一个防御性程序员。我相信我的代码的用户不太清楚他们在做什么。事实上,如果文件被使用,我会给它一个不同的名称,而且文件也不应该被删除,所以等待它可写永远不会发生,直到用户决定备份它并将其移动到另一个foldeOK,对于这个错误,我深表歉意。我真的不明白你在等待一个文件变为“可写”时会做什么。事实上,如果文件被使用,我会给它一个不同的名称,而且文件不应该被删除,所以等待它变为可写将永远不会发生,直到用户决定备份它并将其移动到另一个foldeOK,很抱歉这个错误。我真的不明白在等待文件变为“可写”时你会做什么。