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