Saya ingin cara untuk menangkap kesalahan ketika menjalankan file init saya, dan kemudian menanganinya dengan anggun. Banyak kustomisasi dan keybindings terpenting saya muncul di akhir file init saya untuk memastikan bahwa pengaturan lain tidak diterapkan di atasnya. Masalahnya adalah ketika inisialisasi dibatalkan lebih awal, saya merasa benar-benar lumpuh mencoba men-debug masalah tanpa ikatan kunci dan pengaturan yang saya kenal sedang diterapkan.
Apakah ada cara untuk menyelesaikan proses inisialisasi dengan anggun ketika kesalahan terjadi?
sumber
with-demoted-errors
. Anda bisa menambahkan argumen string seperti itu"LOOK OVER HERE!!! %s"
, sehingga Anda tidak akan kehilangan kesalahan di buffer pesan.with-demoted-errors
ini hanya tersedia dalam 24,4@Dan dijelaskan dengan baik bagaimana Anda dapat mengubah kesalahan menjadi pesan. Anda juga dapat melakukan apa pun yang Anda inginkan dengan menggunakan kesalahan
condition-case
. Namun pilihan lain adalah menggunakanunwind-protect
.Saya akan tetap di
condition-case
sini, tanpa alasan apa pun.Menangkap Kesalahan
Ini harus selalu menjamin definisi kunci Anda dievaluasi, terlepas dari apa yang terjadi di dalamnya
condition-case
. Setiap kesalahan disimpan di dalaminit-error
.Membuangnya Kembali
Setelah itu, buang saja kesalahannya lagi. Ada beberapa cara Anda bisa melakukan itu, ini dia.
sumber
unwind-protect
menyebabkan kesalahan untuk segera diangkat kembali, setelah mengeksekusi kode apa pun yang Anda masukkan dalam klausa penyelamatannya. Ini sepertifinally
dalam bahasa seperti Java, bukancatch
.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-alihrequire
: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
panggilanwith-demoted-errors
(saya menulisnya sebelum saya tahuwith-demoted-errors
), tetapi poin pentingnya adalah bahwa Anda pada dasarnya dapat mengimplementasikan sesuatu seperti kombinasi Dan dariwith-demoted-errors
danunwind-protect
tanpa pembungkus (berpotensi sangat panjang) blok kode.sumber
eval-buffer
. Terima kasih telah mempostingnya.