जवाबों:
BTW, एक वैकल्पिक विकल्प कुछ इस तरह हो सकता है:
(let ((error t))
(unwind-protect
(prog1 (call-function)
(setq error nil))
(when error (cleanup))))
लाभ यह है कि आप त्रुटि को पकड़ने और फिर से उखाड़ने से बचते हैं, जिसका अर्थ है कि डिबगर आपको सही बैक्रेस दिखाएगा (वह जो त्रुटि के वास्तविक स्रोत से मेल खाती है, बजाय इसके कि आप किसी और की त्रुटि को फिर से फेंक दें। )।
एक और अंतर यह है कि cleanupन केवल त्रुटि पर बुलाया जाएगा, बल्कि यह भी कि कोड एक C-gया कॉल करने के लिए बाधित है throw।
quitनहीं है error)। IOW यू वैन इसे भी पकड़ लेती है condition-caseलेकिन इसके लिए आपको quitसाथ रखना होगा error। बेशक, कि अभी भी 'फेंक' मामले को संभाल नहीं होगा।
आप देख रहे हैं signal:
(condition-case err
(call-function)
(error
(cleanup)
(signal (car err) (cdr err)))) ; reraise `err'
signal, लेकिन इसका प्रोटोटाइप है (signal ERROR-SYMBOL DATA), नहीं (signal ERROR)।
carऔर साथ खींच लिया है cdr। उत्तर अपडेट किया गया।
condition-caseपकड़ेगाkeyboard-quit?