try except finallyが分かりません
■ このスレッドは過去ログ倉庫に格納されています
0001プログラマ
NGNGbegin
Result := False;
リソース確保;
try
例外が発生する可能性のある処理;
Result := True;
finally
リソース解放;
end;
end;
これで、例外が発生してエラーになればFalse、
何も無ければTrueを返す関数を作ろうと思ったのですが
(例外が発生しても何事もなく、Falseを返す)
例外が発生した時、ちゃんと処理されません。ヘルプを
見ると、finallyは例外処理までやらない、みたいなことが
書いてありました。
どうすればいいでしょうか?
0002名無しさん@お腹いっぱい。
NGNGそれをラップするクラスやメソッドは、戻り値を例外クリエイトに変更してあげましょう。
そうすれば、大人数で開発するときに、戻り値を見ない人が居ても、
バグ位置で処理を停止することが出来ます。
00032
NGNG00042
NGNGfunction Foo(): Boolean;
begin
リソース確保;
try try
例外が発生する可能性のある処理;
Result := True;
Except
Result := False;
end;
finally
リソース解放;
end;
end;
0005名無しさん@お腹いっぱい。
NGNG00062
NGNGfunction Foo(): Boolean;
begin
リソース確保;
try try
例外が発生する可能性のある処理;
Result := True;
Except
On E:Exception do begin
Result := False;
ShowMessage(E.Message);
end;
end;
finally
リソース解放;
end;
end;
00072
NGNGProcedure Foo(): Boolean;
begin
リソース確保;
try try
例外が発生する可能性のある処理;
if Win32Error then
Raise Exception.create('Win32がエラーを起こしました');
Except
エラー処理;
Raise; //例外をそのまま上にあげる
end;
finally
リソース解放;
end;
end;
00081
NGNG上手くいったのですが、別の問題が出てしまいました。
この関数をForm.Createハンドラで呼び出して、False
なら、直ちにプログラムを終了させるつもりだったのですが
Releaseメソッドは、ハンドラから抜け出すまで実行
されないと書いてありました。
Form1.Create
if not Foo then
Release;
正常時の処理;
end;
調べてみると、プログラムの終了方法にいくつかある
みたいなのですが、どれを使うのがいいのかわかりません。
条件文を反転して
if Foo then
begin
正常時の処理;
end
else
Release;
end;
//ここからイベントハンドラの終わりまで何も処理を書かない
end;
みたいにしないとダメなんでしょうか?
00091
NGNG起動時に条件分岐してプログラムを終了させるか実行させるか
というのは話題としてありきたりのようで、某メーリングリストで
検索したら、そのものズバリの質問と回答がありました。
お手数をかけました。
■ このスレッドは過去ログ倉庫に格納されています