Błędy mogą wystąpić w wielu sytuacjach
- Keidy Użytkownik ma coś wpisać, wybrać, zaznaczyć, tylko wciśnie enter/spację
- Próba dzielenia przez 0
- Keidy Użytkownik użje klawisza [ESC]
- Błędnie napisana intrucja w programie, np użycie zbyt małej, zbyt dużej ilości parametrów wywołania funkcji. niepoprawny typ zmiennej przekazywanej do funkcji
Wszystkie takie sytuacje powinny być obsłużone przez przechwytywanie wyjątków czy właśnie obsługę błędów.
Z pomocą przychodzi nam funkcja *error*
Funkcja *error* może być zdefiniowana przez programistę. Funkcja może być zdefiniowana oddzielnie jako funkcja lokalna w każdej funkcji.
Jeśli ZWCAD wykonujac kod napotka dowolny błąd, przejdzie do najbliżej zdefiniowanej funkcji *error* czyli w obecnej funkcji, lub w funkcji nadrzędnej jeśli wywoływana funkcja jest funkcją zadeklarowaną lokalne wewnątrz innej funkcji.
Funkcja *error* powinna mieć jeden parametr - który będzie tekstem określającym komunikat błędu.
Funkcja *error* standardowo zaimplmentowana w ZWCAD wyświetla komunikat błędu w pasku poleceń
(itoa nil)
error: incorrect type - nil
Jednym z najpopularniejszy zastosowań funkcji *error* może być przywracanie domyślnych wartości zmiennych systemowych zmienionych w czasie działania aplikacji niezależnie od tego, czy cała procedura została wykonana poprawnie, czy też na którymś etapie wystąpił błąd.
Przykład:
(defun c:test ( / *error* osm )
(defun *error* ( msg )
(if osm (setvar 'osmode osm))
(princ)
)
(setq osm (getvar 'osmode))
(setvar 'osmode 0)
(rtos (getreal "\nPress Esc to exit, press Enter to force an error ..."))
(*error* "")
(princ)
)
Jeśli chcesz dowiedzieć się więcej o błędach i ich przechwytywaniu, poczytaj o funkcjach:
(vl-catch-all-apply 'function list)
(vl-catch-all-error-message error-obj)
(vl-catch-all-error-p arg)