Как в elisp лучше всего отловить случай ошибки

Я пытаюсь расширить функции выбора etags -, чтобы он возвращался -к обычному тегу find -, если найти тег -в точке не удалось. Я пробовал код:

(defun my-etags-find-tag ()
  "Find at point or fall back"
  (interactive)
  (unless (etags-select-find-tag-at-point)
    (etags-select-find-tag)))

(global-set-key (kbd "C-f") 'my-etags-find-tag)

Однако это не удается, когда точка не соответствует допустимому тегу. Вместо этого я получаю сообщение об ошибке, вызванное etags -выберите -найдите -тег -в точке -:

etags-select-find-tag-at-point: Wrong type argument: char-or-string-p, nil

В этом случае мне просто нужно повторить тест, выполненный etags -выбрать -найти -тег -в -точка:

(defun my-etags-find-tag ()
  "Find at point or fall back"
  (interactive)
  (if (find-tag-default)
      (etags-select-find-tag-at-point)
    (etags-select-find-tag)))

Но это кажется немного избыточным. Можно ли перехватывать исключения и выполнять альтернативную обработку в elisp?

5
задан stsquad 20 July 2012 в 11:47
поделиться