try
try-catch 制御命令のtryブロックを開始
catch
try-catch 制御命令のcatchブロックを開始
呼出し手順
try statements catch statements end
説明
try
-catch
制御構文
はエラーを発生する可能性があるコードを管理するために
使用されます.
try
-catch
制御命令が
実行されている場合,通常,
try
と catch
キーワードの
間の命令のみが実行されます.
しかし,これらの命令のどれかでエラーが発生した場合,
catch
キーワードまでの命令はスキップされ,
catch
および end
キーワードの間の命令が,デフォルトのエラーモードで
実行されます.
lasterror 関数により 記録されたエラーを取得することができます.
代替命令が指定されない場合,catch
命令
は無視されます.
エラー処理用の'errcatch'
引数を指定して
execstr 関数を
使用することも可能であることに注意してください.
これは,特に構文エラーを処理する際に有用です.
try-catch
は以下に
多少なりとも似ていることにも注意してください:
if execstr("<try instructions>","errcatch")<>0 then <catch instructions> end
この命令は,"errcatch" と同様の
内部機構を使用しています.
これが,
execstr(...,"errcatch")
をtry
-catch
制御構造の中に含めることができない理由です.
このコンテキストは検出され,
特定のエラーメッセージが発生します
(この誤差はtry
でトリガーされた場合の
他の誤差と同様に捕捉,保持されます).
しかし, try
-catch
制御構造はネスト可能です (以下の例2を参照ください).
例
// 例 1 file_path=TMPDIR+'/wrong' try u=mopen(file_path,'r') x=mget(10,'c',u) catch disp(['file '+file_path+ 'cannot be read', 'using default values for x']) x=1:10 end [error_message,error_number]=lasterror(%t) // 例 2 (ネストしたtry/catch構造) function nestedtry(a, b) disp("START") mprintf("\ta is %s\t\tb is %s\n",string(a),string(b)) try disp("try 1") try disp("try 2") z=a+1; // 文字列の場合はエラー catch disp("catch 2") t=b+1; // 文字列の場合はエラー end disp("after try 2") catch disp("catch 1") end disp("after try 1 - THE END") endfunction nestedtry(1,1) nestedtry("a string",1) nestedtry(1,"a string") nestedtry("a string","a string")
履歴
バージョン | 記述 |
6.0.0 | try and catch are now protected:
Assignments like try=1 or catch=2 are no
longer possible. |
Report an issue | ||
<< then | Control flow | while >> |