Отлов ошибок из SQLite в Common Lisp

Я использую оболочку SQLite от Quicklisp, которая описана здесь. Я замечаю, что, например, execute-non-query ничего не возвращает, но выбрасывает sqlite-errors. Однако я не уверен, как с ними обращаться — насколько я могу судить, catch нужен явный тег, и я не уверен, как их помечает оболочка.

В принципе, я хотел бы сделать что-то вроде этого:

(if (no-error (execute-non-query *db* query-string))
    (do-happy-thing)
    (report-error))

Как мне это сделать?


person Koz Ross    schedule 09.11.2014    source источник


Ответы (1)


handler-case твой друг.

(handler-case 
    (progn
      (execute-non-query *db* query-string)
      (do-happy-thing))
  (sqlite-error (err) (report-error err))) ; err contains additional information
person jlahd    schedule 10.11.2014
comment
Report-error здесь должно быть имя do-sad-thing. - person Svante; 11.11.2014