Giả sử tôi có thói quen sau đây:Delphi - Thứ tự "đúng" cho ngoại trừ và cuối cùng là khối là gì?
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;
gì được ý nghĩa của việc có các except
và finally
hoán? Tôi đã thấy nhiều bài đăng với cả hai cách xung quanh, nhưng tôi chưa thấy giải thích rõ ràng về cách nào phù hợp trong trường hợp này (tôi vẫn nghĩ rằng trong cấu trúc trên, khối finally
thực hiện sau số except
khối!).
Tôi cũng thấy các bài đăng đề xuất rằng việc trộn các khối try..except
và try..finally
không phải là một ý tưởng hay. Làm thế nào bạn có thể tránh nó trong các tình huống mà một thói quen ném một ngoại lệ như là một phần của hoạt động bình thường - chẳng hạn như trong một số thói quen Indy?
* "trong cấu trúc trên, khối cuối cùng sẽ thực thi sau khối ngoại trừ" * - Điều đó không chính xác. –