E2145 Wiederhervorrufen einer Exception ist nur im Exception-Handler möglich (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)

Sie haben die Syntax der raise-Anweisung benutzt, die für die Neuauslösung einer Exception verwendet wird, aber der Compiler hat festgestellt, dass diese Neuauslösung außerhalb eines Exception-Behandlungsblockes erfolgt ist. Eine Einschränkung des aktuellen Mechanismus zur Exception-Behandlung unterbindet die Neuauslösung von Exceptions aus verschachtelten Exception-Behandlungsroutinen heraus.


program Produce;

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


begin
end.

Es gibt verschiedene Gründe, aus denen dieser Fehler auftreten kann. Erstens: Möglicherweise haben Sie eine Auslösung ohne Exception-Konstruktor außerhalb eines Exception-Handlers festgelegt. Zweitens: Sie haben eventuell versucht, eine Exception im try-Block eines Exception-Handlers neu auszulösen. Drittens: Vielleicht haben Sie versucht, die Exception in einem Exception-Handler neu auszulösen, der in einem anderen Exception-Handler verschachtelt ist.


program Solve;
  uses SysUtils;

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

begin
end.

Eine Lösung dieses Fehlers liegt darin, explizit eine neue Exception auszulösen; dies ist wahrscheinlich in Situationen wie "Fall 1" und "Fall 2" die Intention gewesen. In der Situation von "Fall 3" sollten Sie Ihren Quelltext untersuchen, um eine geeigneten Umweg zu finden, mit dem die gewünschten Ergebnisse erzielt werden können.