このページの翻訳は最新ではありません。ここをクリックして,英语の最新版を参照してください。
马铃薯®ソフトウェアの既定の设定では,例外がスローされると现在実行中のプログラムを停止します。ただし,プログラムで例外をキャッチすると,误りに关する情报を收集し,适切な方法で特定の状况に対处できます。このためには,试着抓
ステートメントが必要です。
期待どおりの结果が生じない可能性のあるコードがステートメントに含まれる场合は,これらのステートメントを试着抓
ブロックに入れます。エラーが発生した场合はキャッチされ,适切に处理されます。
试着抓
ステートメントは,次の疑似コードにようになり,次の2つの部分で构成されます。
尝试
と抓住
ステートメント间のすべての行を含む,尝试
ブロック。
抓住
と结尾
ステートメント间のすべての行を含む,抓住
ブロック。
试图执行一个...或多个操作的抓我检查异常对象错误信息ME试图找出什么地方出了错要么试图恢复或清理并终止B端方案继续
このプログラムは、尝试
ブロックのステートメントを実行します。エラーが见つかると,尝试
ブロックの残りのステートメントをスキップし,抓住
ブロックの始め(上の一种
の位置)にジャンプします。尝试
ブロックのすべての演算が成功すると,抓住
ブロックが完全にスキップされ,结尾
ステートメントに続く最初の行(点B.
)に进みます。
尝试
那抓住
那结尾
コマンドと、尝试
と抓住
ブロックのコードは,别の行に指定することを推奨します。同じ行にこれらのコンポーネントのいずれかを组み合わせる场合は,以下のようにコンマで区切ります。
尝试,冲浪,赶上我,ME.stack,最终ANS =文件:'草根\工具箱\ MATLAB \ graph3d \ surf.m”名称: '冲浪' 行:49
メモ
尝试
または抓住
ブロック内では,入れ子关数を定义することはできません。
実行时に,コードは尝试
ブロックに入り,通常のプログラムの一部と同様に各ステートメントが実行されます。エラーが见つからなかった场合,MATLABでは抓住
ブロックが完全にスキップされ,结尾
ステートメントに従って実行を続けます。尝试
ステートメントのいずれかにエラーがあると、そのブロックの残りのステートメントは実行せずに、すぐに尝试
ブロックを终了し,抓住
ブロックに入ります。
抓住
コマンドは,抓住
ブロックの开始をマークし,例外の原因についての情报を含むデータ构造へのアクセスを提供します。これは,以前の疑似コードの変数我
として表示されます。我
はMException
オブジェクトです。例外が発生すると,MATLABはMException
オブジェクトを作成し,そのエラーを处理する抓住
ステートメントに含めてオブジェクトを返します。
抓住
ステートメントでは引数を指定する必要はありません。MException
オブジェクトで提供される情报やメソッドが必要でない场合は,抓住
キーワードのみを指定します。
MException
オブジェクトは,エラーのあるプログラムの内部コードによって作成されます。このオブジェクトは,エラーに关する情报を含むプロパティをもちます。この情报は,何が起こったかを特定したり,対处方法を决定する际に役立ちます。MException
オブジェクトではメソッドへのアクセスも提供され,例外に応答できるようになります。
抓住
ブロックに入ると,MATLABではステートメントが顺番に実行されます。これらのステートメントでは,以下を试みることができます。
エラーの解决
エラーに関する詳細情報の収集
MException
オブジェクトの情报に基づいた,适切な応答
エラーの発生したコードの残した环境のクリーンアップ
抓住
ブロックは,多くの场合,重演
コマンドで终わります。重演
では,例外が初めにスローされたときの状态に呼び出しスタックの情报を保ち,MATLABで现在の关数を终了させます。この关数が最上位にある场合,つまり,他の关数によって呼び出されなかった场合は,プログラムが终了します。エラーの発生した关数が别の关数で呼び出された场合は,呼び出し侧の关数に戻ります。プログラムは実行を続け,上位レベルの关数に戻ります。ただし,呼び出しのいずれかが上位レベルの尝试
ブロック内で行われた場合は例外で、この場合は対応する 接住ブロックが実行されます。
以下の例では,イメージファイルの内容を読み込みます。これには详细なエラー处理が含まれており,エラーに対して実行できる提案アクションの一部について说明します。
イメージを読み取る关数がエラーをスローおよびキャッチする方法にはいくつかあります。
最初の如果
ステートメントは,关数が入力引数を指定して呼び出されているかどうかをチェックします。入力引数が指定されていない场合,プログラムはエラーをスローし,エラーを修正するための入力引数を提案します。
尝试
ブロックでは,ファイルを开いて読み取りが试行されます。ファイルを开けなかった场合や,読み込みに失败した场合は,プログラムで结果の例外がキャッチされ,MException
オブジェクトが変数ME1
に保存されます。
抓住
ブロックでは,指定されたファイルが见つからなかったかどうかのチェックが行われます。见つからなかった场合は,ファイル名拡张子の一般的なバリエーション(たとえば,jpg
の代わりにJPEG
)を使用して,操作が再试行されます。これは,元の试着抓
に入れ子にされた试着抓
ステートメントを使用して行われます。
函数d_in=read_image(文件名)%检查输入参数的数量。如果nargin<1 me=MException('MATLAB:notEnoughInputs','notEnoughInputs'不够输入参数');aac=matlab.lang.correction.AppendArgumentsCorrection('image.png');me=me.addCorrection(aac);扔(我);end%尝试读取文件并捕获异常(如果出现)。尝试fid=fopen(文件名为'r');d_in=fread(fid);catch ME1%获取错误标识符的最后一段。idSegLast=regexp(ME1.identifier,,(?<=:)\w+$,'match');%读取是否因为找不到文件而失败?如果strcmp(idSegLast,'invalidId')&&~存在(文件名,'file')%Yes。尝试修改文件扩展名。切换ext case'.jpg''%Change jpg to jpeg filename=strep(filename,.jpg',.jpeg');大小写“.jpeg%”将jpeg更改为jpg filename=strep(文件名“.jpeg”,“.jpg”);case'.tif'%将tif更改为tiff filename=strep(文件名'.tif',.tiff');案例'.tiff'%将tiff更改为tif filename=strep(文件名'.tiff',.tif');否则fprintf('找不到文件%s\n',文件名);回流(ME1);结束%重试,修改文件名。尝试fid=fopen(文件名为'r');d_in=fread(fid);catch ME2 fprintf('无法访问文件%s\n',文件名);ME2=添加原因(ME2,ME1);回流(ME2)端
この例では,次のような,例外への応答で実行できる操作をいくつか说明します。
MException
オブジェクトの标识符
フィールドを,エラーの考えられる原因と比较。この场合,关数は识别子がファイルが见つからなかったこととを示す'InvalidFid'
で终了しているかどうかをチェックします。
入れ子になっている试着抓
ステートメントを使用して,改善された入力で操作を再试行。この场合,关数はファイル名拡张子の既知のさまざまなバリエーションを使用して,开く操作と読み取る操作を再试行します。
适切なメッセージを表示。
最初のMException
オブジェクトを2番目の原因
フィールドに追加
推奨される修正をMException
オブジェクトに追加。
例外を再スロー。これによりプログラムの実行が停止し,エラーメッセージが表示されます。
エラーによって引き起こされた望ましくない结果もクリーンアップすることをお勧めします。たとえば,エラーの発生后に开いたままになっている図を闭じます。