2016-10-21 14 views
0

fopenがファイル名またはパスが存在しないときに例外をスローしないのはなぜですか?なぜMatlabの `fopen`は例外をスローしませんか?

in_path = 'pqlcnaf8765mlr9f6lf2; 

try 
    in_file_id = fopen(in_path,'r'); 
catch 
    error('Problem with input file.')  
end 

in_pathは存在しません。呼び出しは-1の値を持つin_file_idを返しますが、例外はスローされません。なぜ誰かが知っていますか?

答えて

3

ドキュメントの状態として、例外をスローするように設計されていない:

If fopen cannot open the file, it returns -1. 

あなたが欲しい例外をスローするようにコードを設計する必要があります。

in_path = 'pqlcnaf8765mlr9f6lf2; 

in_file_id = fopen(in_path,'r'); 
if in_file_id == -1 
    error('Problem with input file.')  
end 

が編集

Re:第1コメントのリンク - >は、try catchブロックの処理方法を示しています。 fread行のためにエラーが発生しています。あなたのコードで同じことを行うことができます:

try 
    in_file_id = fopen(in_path,'r'); 
    fread(in_file_id); 
catch 
    error('Problem with input file.')  
end 

は、私はリンクが存在しないファイルをどのように扱うか良い例であるとは思わないと述べました。

+0

このリンクについて:https://se.mathworks.com/help/matlab/matlab_prog/respond-to-an-exception.htmlこれは私を混乱させました(それでもやります)。ありがとう。 – Danijel

+1

もう1つ。関数がエラーをスローするように設計されているかどうかはどのようにわかりますか?たとえば、[audioinfo](https://se.mathworks.com/help/matlab/ref/audioinfo.html)がスローされますが、これはどこに文書化されていますか? – Danijel

+1

ほとんどのエラーは実行時エラーです。これとは別に、多くの関数はエラーコードを得る 'Cスタイル 'と書かれています。関数は、入力が間違っている場合にのみスローするように設計されています。 MATLABコードには明示的なスローはあまりありません。ドキュメントには完全な仕様があります。 – patrik

関連する問題