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 cleanup
akan dipanggil tidak hanya pada kesalahan tetapi juga jika kode terganggu oleh C-g
atau panggilan ke throw
.
quit
tidak ada di error
antara orang tuanya). TUNGGU Anda van juga menangkapnya condition-case
tetapi untuk itu Anda harus quit
mengikuti 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)
.
car
dan cdr
. Jawaban diperbarui.
condition-case
menangkapkeyboard-quit
?