Jawaban lain cukup baik mencakup fasilitas penanganan kesalahan tingkat rendah yang akan berguna dalam kasus seperti ini. Pendekatan lain yang dapat membantu adalah modularitas. Sebagai contoh, saya membagi file inisialisasi saya menjadi beberapa file yang berbeda (menggunakan yang provide
sesuai), dan saya memuatnya menggunakan fungsi ini alih-alih 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)))
Kesalahan saat memuat file dengan cara ini masih akan mencetak pesan, tetapi itu tidak akan mencegah eksekusi apa pun di luar file di mana kesalahan itu sebenarnya terjadi.
Tentu saja, fungsi ini tidak jauh berbeda dari membungkus require
panggilan with-demoted-errors
(saya menulisnya sebelum saya tahu with-demoted-errors
), tetapi poin pentingnya adalah bahwa Anda pada dasarnya dapat mengimplementasikan sesuatu seperti kombinasi Dan dari with-demoted-errors
dan unwind-protect
tanpa pembungkus (berpotensi sangat panjang) blok kode.
with-demoted-errors
. Anda bisa menambahkan argumen string seperti itu"LOOK OVER HERE!!! %s"
, sehingga Anda tidak akan kehilangan kesalahan di buffer pesan.