E2145 Re-déclenchement d'une exception autorisé seulement dans un gestionnaire d'exception (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Delphi)

Vous avez utilisé la syntaxe de l'instruction raise qui est utilisée pour re-provoquer une exception, mais le compilateur a déterminé que ceci s'est produit hors du bloc de gestion d'exception. Une limitation du mécanisme actuel de gestion d'exception désactive la ré-émission d'exceptions depuis des gestionnaires d'exceptions imbriqués.



program Produce;

  procedure RaiseException;
  begin
    raise;        (*cas 1*)
    try
      raise;        (*cas 2*)
    except
      try
        raise;        (*cas 3*)
      except
      end;
      raise;
    end;
  end;


begin
end.

Cette erreur peut se produire pour plusieurs raisons. Premièrement, vous avez peut-être spécifié une instruction raise sans constructeur d'exception hors d'un gestionnaire d'exception. Deuxièmement, vous essayez peut-être de re-provoquer une exception dans le bloc d'essai d'un gestionnaire d'exception. Troisièmement, vous essayez peut-être de re-provoquer l'exception dans un gestionnaire d'exception imbriqué dans un autre gestionnaire d'exception.



program Solve;
  uses SysUtils;

  procedure RaiseException;
  begin
    raise Exception.Create('cas 1');
    try
      raise Exception.Create('cas 2');
    except
      try
        raise Exception.Create('cas 3');
      except
      end;
      raise;
    end;
  end;

begin
end.

Une solution pour résoudre cette erreur est de provoquer explicitement un nouvelle exception, c'est probablement le cas dans des situations comme 'cas 1' et 'cas 2'. Pour la situation du 'cas 3', vous devrez examiner votre code pour déterminer une alternative adaptée qui produira les résultats souhaités.