जवाबों:
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
?