加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在delphi 7中,是`try …除了raise;结束;“有意义吗?

发布时间:2020-12-15 04:06:59 所属栏目:大数据 来源:网络整理
导读:在我维护的一些Delphi 7代码中,我注意到以下很多实例: with ADOQuery1 do begin // .. fill out sql.text,etc try execSQL; except raise; end;end; 在我看来,这些尝试块可以被删除,因为它们什么都不做.但是,我对可能出现的微妙副作用持谨慎态度. 任何人都
在我维护的一些Delphi 7代码中,我注意到以下很多实例:
with ADOQuery1 do begin
  // .. fill out sql.text,etc
  try
    execSQL;
  except
    raise;
  end;
end;

在我看来,这些尝试块可以被删除,因为它们什么都不做.但是,我对可能出现的微妙副作用持谨慎态度.

任何人都可以想到这些块实际上可以做任何没有它们的情况下会发生的事情吗?

解决方法

在这种情况下,raise操作没有效果,应该删除,因为它只是重新引发异常块刚刚捕获的异常. raise通常用于在没有适当的错误处理时将控制转移到块的末尾.在下面我们处理自定义异常,但任何其他异常应该在别处处理.
try
  someOperation;
except
  on e: ECustomException do
    SomeCustomHandelr;
  else
     begin
       // the raise is only useful to rethrow the exception to an encompasing 
       // handler.  In this case after I have called my logger code. as Rob
       // mentioned this can be omitted if you arent handling anything because
       // the compiler will simply jump you to the next block if there is no
       // else.
       LogUnexpectedException('some operation failed',e);
       raise;
     end;
end;

小心有没有“加注”的类似外观形式,它具有吃/隐藏任何例外的副作用.非常肆无忌惮的开发人员的实践,他们希望能够在竞争中占据一席之地.

with ADOQuery1 do begin  
  // .. fill out sql.text,etc  
  try    
    execSQL; 
  except
    // no handler so this just eats any "errors"    
  end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读