Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2023.0.0 - 日本語


try

try-catch 制御命令のtryブロックを開始

catch

try-catch 制御命令のcatchブロックを開始

呼出し手順

try
    statements
catch
    statements
end

説明

try-catch 制御構文 はエラーを発生する可能性があるコードを管理するために 使用されます.

try-catch制御命令が 実行されている場合,通常, trycatchキーワードの 間の命令のみが実行されます. しかし,これらの命令のどれかでエラーが発生した場合, 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")

参照

  • error — エラーメッセージ
  • execstr — 文字列中のScilabコードを実行
  • if — 条件付き実行
  • lasterror — 直近に記録されたエラーメッセージを取得

履歴

バージョン記述
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 >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Mar 07 09:28:37 CET 2023