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")

## 参照

- error
- execstr
- if
- lasterror

## 履歴

6.0.0 `try` and `catch` are now protected: Assignments like `try=1` or `catch=2` are no longer possible.