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

Eri*_*c G 3 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;
Run Code Online (Sandbox Code Playgroud)

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

有两个人是我最好的选择try/excepts吗?

bal*_*azs 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;
    
    Run Code Online (Sandbox Code Playgroud)

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

  • +1这是一个比我现在删除的产品更好的答案 (2认同)