使用多个catch块捕获重新引发的异常?

时间:2012-10-15 22:08:26

标签: delphi delphi-2010

我正在捕获异常,对于该类中的特定异常类和错误代码,我会进行一些自定义处理。对于所有其他异常,我想使用通用错误处理程序。像这样:

on E:EADSDatabaseError  do
  begin
    case E.ACEErrorCode of
      5132: 
        begin
        //Custom handling
        end;    
      else
        begin
          raise;
        end;
    end;
  end;
on E:Exception do
  begin
    //usual handling
  end;

对于原始错误中的大多数代码,我想进入通用错误处理程序。但是,重新加载它似乎不允许触发更一般的异常类处理程序。 (我不确定我会期待它。我以前从未做过这种事。)

我有两个try/excepts的最佳选择吗?

1 个答案:

答案 0 :(得分:7)

我可以看到3种可能的解决方案,

  • 你说了什么,两个尝试除了阻止
  • 将您常用的处理代码放入程序,并从两个地方调用
  • 类似这样的事情

    on E:Exception do
    begin
      if ( e is EADSDatabaseError ) and
         ( EADSDatabaseError(e).ACEErrorCode = 5132 then
      begin
        //Custom handling
      end else
      begin
       //usual handling
      end;
    end;
    

在这种情况下,我会使用第三个。