Jawaban:
BTW, opsi alternatif bisa berupa:
(let ((error t))
(unwind-protect
(prog1 (call-function)
(setq error nil))
(when error (cleanup))))
Keuntungannya adalah Anda menghindari penangkapan & rethrowing kesalahan, yang berarti misalnya debugger akan menunjukkan kepada Anda backtrace yang tepat (yang sesuai dengan sumber kesalahan yang sebenarnya, daripada yang sesuai dengan Anda melemparkan kembali kesalahan orang lain ).
Perbedaan lain adalah bahwa cleanupakan dipanggil tidak hanya pada kesalahan tetapi juga jika kode terganggu oleh C-gatau panggilan ke throw.
quittidak ada di errorantara orang tuanya). TUNGGU Anda van juga menangkapnya condition-casetetapi untuk itu Anda harus quitmengikuti error. Tentu saja, itu masih tidak akan menangani kasus `melempar '.
Anda sedang mencari signal:
(condition-case err
(call-function)
(error
(cleanup)
(signal (car err) (cdr err)))) ; reraise `err'
signal, tapi prototipenya (signal ERROR-SYMBOL DATA)bukan (signal ERROR).
cardan cdr. Jawaban diperbarui.
condition-casemenangkapkeyboard-quit?