Main Content

MATLAB アプリケーションでの例外処理

概要

プログラムを計画、記述してテストする場合、異なる条件下で実行すると、いくら注意しても必ずしも期待どおりの結果が得られるとは限りません。プログラムにエラー チェックを加えることは、どのような条件下でも必ず信頼性の高い演算が行われるようにする上で有効です。

MATLAB® では、異なるタイプのエラーにプログラムがどのように応答するかを決めることができます。たとえば、ユーザーに入力を促すプロンプトを表示したり、より詳しいエラーや警告メッセージを表示したり、既定値を使って再計算するなどが考えられます。MATLAB のエラー処理機能では、特定のエラー状況がプログラムによってチェックされ、その状況に応じて適切なコードが実行されます。

MATLAB によって、実行中のコマンドやプログラムで重大なエラーが検出されると、エラー時に起こったことについての情報が収集され、エラーの理解に役立つメッセージが表示され、コマンドまたはプログラムが終了されます。これは、"例外のスロー" と呼ばれます。MATLAB コマンド プロンプトでコマンドを入力しているとき、あるいはユーザー プログラムのコード実行中に、例外が発生する可能性があります。

コマンド ラインでの例外の発生

MATLAB プロンプトで例外が発生した場合は、次に述べるように、いくつかの処理方法を選択できます。

エラー メッセージから判定

MATLAB で表示されたエラー メッセージを評価します。ほとんどのエラー メッセージでは、プログラムのエラーに対する直接の原因が表示されます。多くの場合は、原因とその状態を修正するのに何が必要であるかを見つけ出すために十分な情報が含まれています。

エラーの発生したコードのレビュー

エラーが発生した関数が MATLAB プログラム ファイルとして実装されている場合、エラー メッセージには次のような行が含まれているはずです。

surf

surf の使用中にエラーが発生しました (49 行目)
入力引数が不足しています。

テキストは、エラーが発生した関数の名前 (この場合、surf) と、その関数のプログラム ファイル内でエラーが発生した行の番号を示しています。行番号をクリックすると、MATLAB によってファイルが開き、エラーの発生したファイル内の位置にカーソルが配置されます。この行とそれ以前のコードを調べることによって、エラーの原因が見つかることがあります。

デバッガーでのコードのステップ実行

MATLAB デバッガーを使用してエラーの発生するコードをステップ実行できます。下線の付いたエラー テキストをクリックすると、MATLAB エディターでファイルが開き、エラーの発生した位置またはその近くにカーソルが配置されます。次に、その行のはじめのハイフンをクリックし、その位置にブレークポイントを設定します。プログラムを再び実行すると、MATLAB ではブレークポイントの位置で実行が一時停止され、プログラム コードをステップ実行できます。dbstop on error コマンドは、エラーの位置を見つけるのにも便利です。

詳細は、MATLAB コード ファイルのデバッグのドキュメンテーションの説明を参照してください。

プログラム コードでの例外の発生

プログラム ファイルにプログラムを記述する場合には、プログラムを終了させるのではなく、例外を "キャッチ" して、処理または解決を試みることができます。例外をキャッチすると、通常の終了処理を一時的に停止し、エラーを処理するコード ブロックに入ります。このコード ブロックは、"catch ブロック" と呼ばれます。

catch ブロックでは、以下を実行できます。

  • エラーについて取得された情報を調べる

  • ユーザーに報告する詳細な情報を収集する

  • 実行中タスクを他の方法で実行しようと試みる

  • エラーにより発生した望ましくない影響をクリーンアップする

catch ブロックの最後に到達したときには、可能であればプログラムの実行を続けるか、プログラムを終了できます。

MException オブジェクトを使用して、プログラム内の例外に関する情報にアクセスします。詳細については、例外への応答を参照してください。

新規例外の生成

プログラム コードでは、プログラムが機能しなかったり、許容できない結果になる条件が検出されると、例外がスローされます。次の処理が行われます。

  • エラーの内容と実行していたコードに関する情報を保存します。

  • エラーについてのその他の関連情報を収集します。

  • MATLAB に例外をスローするように指示します。

MException オブジェクトを使用して、エラーに関する情報を取得します。詳細については、例外のスローを参照してください。