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