Angenommen, ich habe die folgende Routine:Delphi - Was ist die "richtige" Reihenfolge für außer und schließlich Blöcke?
function ReadFile(f : TFilename) : Boolean;
var
fs : TFileStream;
begin
Result := False;
try
fs := TFileStream.Create(f, ...);
try
// read file ...
Result := True;
finally
FreeAndNil(fs);
end;
except
// handle exceptions ...
end;
end;
Was sind die Auswirkungen der except
und finally
umgesetzt haben? Ich habe viele Beiträge mit ihnen in beide Richtungen gesehen, aber ich habe keine klare Erklärung davon gesehen, was in welchen Fällen angemessen ist (ich denke immer noch, es ist seltsam, dass in dem obigen Konstrukt der finally
Block nach die except
ausführt Block!).
Ich habe auch Beiträge gesehen, die darauf hindeuten, dass Mischen try..except
und try..finally
Blöcke ist keine gute Idee. Wie können Sie es in Situationen vermeiden, in denen eine Routine eine Ausnahme als Teil der normalen Operation auslöst - wie in einigen der Indy-Routinen?
* "im obigen Konstrukt wird der finally Block nach dem except Block ausgeführt" * - Das ist nicht korrekt. –