Diğer cevaplar, böyle bir durumda faydalı olacak düşük seviyeli hata işleme tesislerini oldukça iyi bir şekilde ele almıştır. Yardımcı olabilecek başka bir yaklaşım modülerliktir. Örneğin, başlatma dosyamı birkaç farklı dosyaya böldüm ( provide
uygun şekilde kullanarak ) ve bunları yerine bu işlevi kullanarak yüklüyorum 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)))
Bir dosyayı bu şekilde yüklerken bir hata yine de bir ileti yazdırır, ancak hatanın gerçekte meydana geldiği dosya dışında hiçbir şeyin yürütülmesini engellemez.
Tabii ki, bu fonksiyon bir require
çağrıyı sarmaktan gerçekten farklı değil with-demoted-errors
(bilmeden önce yazdım with-demoted-errors
), ama önemli olan nokta, Dan'ın sarma with-demoted-errors
ve unwind-protect
sarma olmadan kombinasyonu (potansiyel olarak çok uzun) kod blokları.
with-demoted-errors
. Bunun gibi bir dize bağımsız değişkeni ekleyebilirsiniz"LOOK OVER HERE!!! %s"
, böylece ileti arabelleğindeki hatayı kaçırma olasılığınız daha düşüktür.