Ich möchte eine Möglichkeit, Fehler beim Ausführen meiner Init-Datei abzufangen und sie dann ordnungsgemäß zu behandeln. Viele meiner wichtigsten Anpassungen und Tastenkombinationen werden am Ende meiner Init-Datei angezeigt, um sicherzustellen, dass andere Einstellungen nicht darüber hinaus angewendet werden. Das Problem ist, dass ich mich bei einem frühen Abbruch der Initialisierung total verkrüppelt fühle, wenn ich versuche, das Problem zu debuggen, ohne dass meine vertrauten Tastaturkürzel und Einstellungen angewendet werden.
Gibt es eine Möglichkeit, den Initialisierungsprozess ordnungsgemäß abzuschließen, wenn ein Fehler auftritt?
quelle
with-demoted-errors
. Sie können ein String-Argument hinzufügen"LOOK OVER HERE!!! %s"
, um die Wahrscheinlichkeit zu verringern, dass der Fehler im Nachrichtenpuffer übersehen wird.with-demoted-errors
ist nur verfügbar in 24.4@Dan hat gut beschrieben, wie Sie Fehler in Nachrichten umwandeln können. Sie können mit auch alles Mögliche tun, um Fehler zu beheben
condition-case
. Eine weitere Option ist die Verwendungunwind-protect
.Ich bleibe
condition-case
hier ohne jeden Grund.Den Fehler abfangen
Dies sollte immer gewährleisten, dass Ihre Schlüsseldefinitionen ausgewertet werden, unabhängig davon, was darin passiert ist
condition-case
. Jeder Fehler wird in gespeichertinit-error
.Wirf es zurück
Danach werfen Sie einfach den Fehler erneut. Es gibt verschiedene Möglichkeiten, dies zu tun. Hier eine.
quelle
unwind-protect
Bewirkt, dass der Fehler sofort erneut ausgelöst wird, nachdem der Code ausgeführt wurde, den Sie in die Rescue-Klausel eingegeben haben. Es ist eher wiefinally
in einer Sprache wie Java alscatch
.Die anderen Antworten haben die einfachen Fehlerbehandlungsmöglichkeiten, die in einem solchen Fall nützlich sind, ziemlich gut abgedeckt. Ein weiterer Ansatz, der helfen kann, ist die Modularität. Zum Beispiel teile ich meine Initialisierungsdatei in mehrere verschiedene Dateien auf (je nach
provide
Bedarf) und lade sie mit dieser Funktion anstelle vonrequire
:Ein Fehler beim Laden einer Datei auf diese Weise gibt weiterhin eine Meldung aus, verhindert jedoch nicht, dass außerhalb der Datei, in der der Fehler tatsächlich aufgetreten ist, etwas ausgeführt wird.
Natürlich unterscheidet sich diese Funktion nicht wirklich vom Einschließen eines
require
Anrufswith-demoted-errors
(ich habe sie geschrieben, bevor ich davon wusstewith-demoted-errors
), aber der wichtige Punkt ist, dass Sie im Wesentlichen so etwas wie Dans Kombination vonwith-demoted-errors
undunwind-protect
ohne Einschließen implementieren können (möglicherweise sehr langwierig). Codeblöcke.quelle
eval-buffer
. Vielen Dank für die Veröffentlichung.