2013-07-26 17 views
13

Matlab posiada dwa mechanizmy sygnalizacji, że coś poszło nie tak: Funkcja error i mechanizmy obsługi wyjątków w języku MException + try/catch/throw.wyjątkami vs. Błędy w Matlab

Wygląda na to, że są w dużej mierze równoważne: funkcja error i funkcja MException mają bardzo podobną składnię. Błędy podniesione przez error() mogą zostać przechwycone przez catch, podczas gdy narzędzia związane z błędami (takie jak dbstop if error i lasterr) również działają z wyjątkami.

Czy jest jakiś powód, aby preferować error('Foo:Bar', 'Some human-readable message about bar') do throw(MException('Foo:Bar', 'Some human-readable message')) lub odwrotnie?

(Są zarówno Zabudowy, więc można nie tylko otwarte (np) error.m aby sprawdzić, czy ktoś jest trywialne otoki wokół drugiego!)

Odpowiedz

7

Te dwa przypadki są praktycznie równoważne (jeżeli wychwycić błąd lub wyjątek, jedyną różnicą jest to, że komórka właściwości 'cause' jest przydzielona nieco inaczej). Funkcja error po prostu ułatwia generowanie i wyrzucanie wyjątków. Jedna miła rzecz o MException jest to, że można utworzyć obiekt MException i przekazać go wokół jako zmienna, zmienić jego właściwości (np adding a cause) i throw lub rethrow gdy są potrzebne. Najczęściej jednak chcesz używać tylko wersji error.

This page od MathWorks zawiera wiele szczegółów dotyczących klasy MException.

+0

To ma sens - nawet adres URL dokumentacji klasy MException mówi "capture-information-about-errors.html". Nie przypuszczam, że widziałeś gdziekolwiek link sugerujący, że są one faktycznie ekwiwalentne? –

1

Jest więcej użytecznych informacji na temat this thread na MATLAB Answers.

Odpowiedź jest taka, że ​​błąd jest znacznie starszy i że nowy poziom zabezpieczeń jest nowszy i bardziej elastyczny. Błąd został zmodyfikowany, aby utworzyć wyjątek ME.

Błąd jest uważany za łatwiejszy w użyciu i kierowane do użytkowników końcowych MATLAB od społeczności naukowej i inżynierskiej. Wybiórczy styl jest bardziej zaawansowany (w tym, że obiekty ME mogą być modyfikowane i ponownie tworzone) i jest skierowany do społeczności programistów.

+0

Kluczowym punktem w tym wątku jest "" błąd ", który został zmodyfikowany tak, aby w zasadzie tworzyć i rzucać obiekt" Zezwalania na ładunek ".", Który tak naprawdę powinien być w dokumentach zarówno dla Wyjątków jak i błędów(). –

+0

Właściwie to myślę, że wątek został uruchomiony przez teraz usuniętą odpowiedź na to pytanie! Dzięki za znalezienie. –

Powiązane problemy