উত্তর:
বিটিডাব্লু, একটি বিকল্প বিকল্প এর মতো হতে পারে:
(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?