警告とエラーの表示
警告の表示
警告を表示してプログラムの実行時に検知された予期せぬ状態を知らせることができます。関数 warning
は、警告メッセージをコマンド ラインに出力します。警告とエラーは、2 つの点で大きく異なります。
警告によってプログラムの実行が停止されることはありません。
不要な MATLAB® 警告を非表示にできます。
コードに関数 warning
を使用することで、実行中に警告メッセージを生成できます。メッセージを関数 warning
への入力引数として指定します。
warning('Input must be text')
たとえば、警告をコードに挿入してソフトウェアのバージョンを確認できます。
function warningExample1 if ~strncmp(version, '7', 1) warning('You are using a version other than v7') end
エラーのスロー
エラーをスローしてプログラム内の致命的な問題を知らせることができます。関数 error
を使って、エラー メッセージをコマンド ラインに出力します。メッセージの表示後、MATLAB は現在のプログラムの実行を停止します。
たとえば、n
個の要素の中から k
個の要素の組み合わせの数を返す関数を作成するとします。このような関数は k > n
となると無意味です。4 つの要素から 8 つは選択できません。この事実を関数に組み込み、combinations
を使用する人にこの問題を知らせなければなりません。
function com = combinations(n,k) if k > n error('Cannot calculate with given values') end com = factorial(n)/(factorial(k)*factorial(n-k)); end
関数 combinations
が無効な入力を受け取ると、MATLAB はエラー メッセージをスローした後、すぐに実行を停止します。
combinations(4,8)
Error using combinations (line 3) Cannot calculate with given values
警告およびエラーへの実行時パラメーターの追加
警告またはエラー メッセージで詳細を特定できるように、実行時にメッセージのコンポーネントを挿入します。関数 warning
は、関数 sprintf
が使用するのと同じ "変換文字" を使用します。変換文字は、コードが実行されるまで不明な部分文字列または値のプレースホルダーとして動作します。
たとえば、この警告は %s
と %d
を使って変数 arrayname
および arraydims
の値を挿入する場所をマークします。
warning('Array %s has %d dimensions.',arrayname,arraydims)
arrayname = 'A'
および arraydims = 3
で実行すると、MATLAB は次のように応答します。Warning: Array A has 3 dimensions.
実行時パラメーターを警告とエラーに追加することにより、プログラム内の問題が明確になります。エラーのスローの説明にあった関数 combinations
を考えてみましょう。実行時パラメーターを使用して、より情報度の高いエラーをスローできます。
function com = combinations(n,k) if k > n error('Cannot choose %i from %i elements',k,n) end com = factorial(n)/(factorial(k)*factorial(n-k)); end
combinations(6,9)
Error using combinations (line 3) Cannot choose 9 from 6 elements
警告およびエラーへの識別子の追加
識別子は、警告またはエラーを一意に参照する方法を提供します。
識別子で警告を有効または無効にします。関数 warning
でテキストを識別する引数を使用して、メッセージに一意のタグを付けます。
warning(identifier_text,message_text)
たとえば、実行中のソフトウェアのバージョンについての前出の MATLAB 警告に識別子のタグを追加できます。
minver = '7'; if ~strncmp(version,minver,1) warning('MYTEST:VERCHK','Running a version other than v%s',minver) end
識別子をエラー メッセージに追加すると否定的なテストを行うことができます。ただし、エラーに対する情報を追加したりエラーから回復するには、一般的には MException
オブジェクトを操作することが必要になります。
参考
warning
| lastwarn
| warndlg
| MException