2016-08-18 11 views
-1

Matlabでは、エラーが発生した場合、その特定のforループインデックスとcontinueを次のインデックスにスキップできますか?ループのインデックスによってエラーが発生するのは、どのforがわからないことに注意してください。エラーが発生した場合に `for`ループインデックスをスキップする方法

エラー:Too many outputs requested. Most likely cause is missing [] around left hand side that has a comma separated list expansion

だがときk = 5エラーが発生したと仮定しよう。 forループスキップインデックスk = 5continuek = 6を作成するにはどうすればよいですか?

for k = 1:10 
    do stuff 
    if error occurs 
     skip k that causes error 
     go to next k 
    end 
end 
+1

Matlabの 'break'はループ全体を終了することに注意してください。 「続行」は次の反復まで続きます。道路沿いの痛みを軽減します。 – Tapio

+0

ああ、私は実際に「続ける」という意味だったので、私は質問を編集します。 – Senyokbalgul

+0

"エラーが発生した場合"とはどういう意味ですか?エラー処理はその性質上随時行われ、複数のエラー処理方法が同じプログラムで頻繁に使用されます。 「エラーが発生しました」という意味に応じて、さまざまなアプローチが推奨されます。 – patrik

答えて

2

この目的でtryを使用できます。

for k = 1:10 
     %do stuff 
     try 
     % portion of the code where error can occur 
     end 
end 
+0

非常に簡単なソリューションをありがとう。 – Senyokbalgul

+0

@Senyokbalgulこれはあなたが望むものを正確に行う唯一の方法ですが、これは状況を処理する最善の方法ではありません。エラー捕捉は、実行時間に関して非常に高価であり、予期しないエラーを捕捉することをより意図している。エラーが予想される場合は、コードで解決してください。 '試着 'をすると、あなたは吸収されているので、他のエラーをもう見つけられなくなります! – Bernhard

1

エラー・利用しているどのkわからない場合:

for i=1:10 
try 
    %do stuff; 
catch 
    warning('some error'); 
end 

あなたがkを知っていれば、簡単な方法は、このことができます:

for k = 1:10 
    if k==6 
    else 
     disp(k); 
    end 
end 

あなたが既に知っている場合kはエラーを引き起こしています:

for k = [1:5 7:10] 
     disp(k); 
end 
+0

質問を編集しました。どのkが実際にエラーを起こすかわからない。 – Senyokbalgul

0

特定の長さのベクトルが必要な場合は、エラーが発生します。これには2つの方法があります。

1)try-catchを使用してください。

2)事前範囲チェックを行います。 if (length(data)<2), continue;

エラーが発生した場合は、(1)または(2)のいずれかを選択できます。好ましくは、コードの残りの部分と一致する方法を選択する。エラーがコードの複数の場所で発生し、これらのすべてで同じ方法で処理する必要がある場合は、(1)を使用します。これにより、同じ場所のすべてのエラーを処理することができます。

私が知る限り、例外を処理する方法には多くの異なる意見があります(ここでは、より一般的な名前「例外」を持つMATLABエラーを参照しています)。 Cプログラマは、例外がまばらに使われるべきだと言っているのに対し、Javaプログラマはそれらをより頻繁に使用すると言います。しかし、gotoキーワードをあまりにも多く使うと悪い習慣と考えられても、gotoキーワードがJavaにあり、Cプログラマはgotoを多くの場所で使用して "例外状況"を処理するでしょう。したがって、エラー処理を行う方法はたくさんあります。私たちはさまざまな選択肢を手助けすることができますが、結局はあなたの選択です(申し訳ありません)。

関連する問題