अन्य जवाबों ने निम्न स्तर की त्रुटि से निपटने की सुविधाओं को अच्छी तरह से कवर किया है जो इस तरह से एक मामले में उपयोगी होंगे। एक और तरीका जो मदद कर सकता है वह है मॉड्यूलरिटी। उदाहरण के लिए, मैंने अपनी इनिशियलाइज़ेशन फ़ाइल को कई अलग-अलग फाइलों में विभाजित किया है ( provide
उपयुक्त के रूप में उपयोग करके ), और मैं उन्हें इस फ़ंक्शन के बजाय इसका उपयोग करके लोड करता हूं require
:
(defun my/require-softly (feature &optional filename)
"As `require', but instead of an error just print a message.
If there is an error, its message will be included in the message
printed.
Like `require', the return value will be FEATURE if the load was
successful (or unnecessary) and nil if not."
(condition-case err
(require feature filename)
(error (message "Error loading %s: \"%s\""
(if filename (format "%s (%s)" feature filename) feature)
(error-message-string err))
nil)))
इस तरह से फ़ाइल लोड करते समय एक त्रुटि अभी भी एक संदेश मुद्रित करेगी, लेकिन यह उस फ़ाइल के बाहर कुछ भी निष्पादित करने से नहीं रोकेगी जहां त्रुटि वास्तव में हुई है।
बेशक, यह फ़ंक्शन वास्तव require
में कॉल को अलग करने से अलग नहीं है with-demoted-errors
(मैंने इसके बारे में जानने से पहले इसे लिखा था with-demoted-errors
), लेकिन महत्वपूर्ण बिंदु यह है कि आप अनिवार्य रूप से डैन के संयोजन with-demoted-errors
और unwind-protect
रैपिंग के बिना (संभवतः बहुत लंबा) जैसे कुछ को लागू कर सकते हैं कोड के ब्लॉक।
with-demoted-errors
। आप इसमें एक स्ट्रिंग तर्क जोड़ सकते हैं"LOOK OVER HERE!!! %s"
, इसलिए आपको संदेशों के बफर में त्रुटि की संभावना कम है।