2016-10-21 4 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 : 첫 번째 댓글의 링크 ->는 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

한 가지 더. 함수가 오류를 발생 시키도록 설계되었는지 어떻게 알 수 있습니까? 예를 들어 [audioinfo] (https://se.mathworks.com/help/matlab/ref/audioinfo.html)가 throw되지만이 내용은 어디에 문서화되어 있습니까? – Danijel

+1

대부분의 오류는 런타임 오류입니다. 이 외에도 많은 함수는 에러 코드를 얻을 수있는'C-style'으로 작성됩니다. 이 함수는 입력이 잘못된 경우에만 throw되도록 설계되었습니다. MATLAB 코드에는 명시 적으로 throw되지 않습니다. 전체 사양은 문서에서 찾을 수 있습니다. – patrik