2011-01-19 16 views
12

Na przykład chcę złapać wyjątek cann't-read-a-file-at-that-path z imread(). Mogę to zrobić.Czy istnieje autorytatywne odniesienie do wyjątków, które mogą być wrzucane przez wbudowane funkcje Matlab?

imagePath = 'a_picture.jpg'; 
try 
    im = imread(imagePath); 
catch exception 
    if strcmp(exception.identifier, 'MATLAB:imread:fileOpen') 
     fprintf('Couldn''t open %s.\n', imagePath); 
     im = []; 
    else 
     fprintf('Unexpected error (%s): %s\n', ... 
       exception.identifier, exception.message); 
     throw(exception); 
    end 
end 

ale jedyne sposoby wiem odkryć magiczne ciąg porównać z ('MATLAB: imread: FileOpen' w tym przypadku), to:

  1. Przyczyna błędu, złapać wyjątek i spójrz na identyfikator. Ale zajmie to dużo czasu, aby to zrobić dobrze. Na przykład, czy Matlab używa innego identyfikatora wyjątku, jeśli plik istnieje, ale tak naprawdę nie jest plikiem graficznym? A jeśli tak, ale nie mam uprawnień do odczytu? Co jeśli jest to katalog?

  2. Sprawdź kod źródłowy. Imread() jest napisany w Matlab, więc jest to możliwe, ale nie byłoby to dla innych funkcji. I oczywiście imread() wywołuje funkcje inne,, które nie są napisane w Matlabie, a wyjątki mogą się od nich wywrócić.

Czy istnieje jakiś autorytatywny sposób dla mnie znać wszystkie wyjątki imread() można rzucić? Mam nadzieję, że jest to gdzieś w dokumentacji, ale nie mogę go znaleźć.

+1

Prawdopodobny duplikat: [MATLAB: odniesienie do komunikatów o błędach] (http://stackoverflow.com/questions/4562698/matlab-a-reference-about-error-messages) – gnovice

+0

Dlaczego ma znaczenie, który wyjątek został zgłoszony? Albo działało, albo nie, prawda? – MatlabDoug

+0

Lepsze pytanie: dlaczego musisz zidentyfikować błąd z taką specyficznością, kiedy wszystko, co naprawdę robisz z nim, skutecznie go podrzuca? – gnovice

Odpowiedz

0

mogę szukać, a ja nic nie znaleźli ... Jedyne co mi się zobaczyć to może pomóc, będzie analizować kodu źródłowego imread, które nie sądzę, że to możliwe. Jednak zawsze możesz spróbować zobaczyć kod źródłowy tej samej funkcji w Octave, ponieważ jest prawie taki sam (przypuszczam).

0

Jeśli jesteś gotów do wyliczyć pliki, aby wygenerować swój własny odniesienia, spróbuj

grep -r "MATLAB:" <matlab root> 

dostaniesz długą listę ... ale wydaje się błędy albo są wyrzucane przez error() lub mexErrMsgIdAndTxt. Te plusy funkcji pozwalają ci być bardziej szczegółowymi. Dość wolno.

grep zauważy również, że niektóre pliki binarne są zgodne. Nakarm go -a i będzie w stanie wyciągnąć komunikaty o błędach z wielu z nich.

1

Nie, nie ma.

Problem polega na tym, że nawet gdyby istniało miarodajne odniesienie do tego, co rzuca dana funkcja w MatLab, może ono zmienić się z wersji na wersję. Więc nawet jeśli mógłbyś to zrobić, prawdopodobnie nie powinieneś.

Polecam tylko sprawdzanie tych, które znasz, możesz obsługiwać i generować ogólne błędy dla innych (lub ponownie użyć tego, co daje MatLab).


Niektóre komentarze oparte na innych języków/ram:

W .NET, jedyna lista wyjątków, które mogą być wyrzucane ze sposobu, w dokumentacji, a nie lubi do kodu źródłowego. Są one często nieaktualne, nieważne i niekompletne.

W języku Java można określić, jaki wyjątek jest tworzony z jakiej metody. Jest to następnie weryfikowane przez kompilator, a zatem autorytatywne referencje mogą być budowane przez kompilator.MatLab nie ma takiej funkcji, dlatego najlepiej jest szukać, jak opisano w innych odpowiedziach.

Powiązane problemy