elisp: try/catch und throw a.k.a. condition-case und signal?

Post Reply
Message
Author
bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

elisp: try/catch und throw a.k.a. condition-case und signal?

#1 Post by bakunin »

Hi!

Ich werde hier leider gerade aus der vorhandenen Dokumentation nicht schlau, was aber wohl an meiner geringen Erfahrung mit elisp zusammenhängt. Ich habe irgendwo bei www.dotemacs.de gelesen, dass man mit condition-case eine Art try/catch basteln kann. Ja, das funktioniert auch:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
(condition-case err
(progn
(message "Hallo")
(undefined-function-call))
(error err))
</font><hr></pre></blockquote>

Ja, der Aufruf der nicht existierenden Funktion wird dabei aufgefangen, nur wie kann ich selbst einen bestimmten Fehler auslösen, den ich mit entsprechendem Code auffangen kann? Irgendwie mit signal offenbar, aber ich weiß nicht, wie das gehen soll.

Cheers,
GNU/Wolfgang
Last edited by bakunin on 10. Feb 2002 20:29, edited 1 time in total.

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: elisp: try/catch und throw a.k.a. condition-case und signal?

#2 Post by bakunin »

Hi!

Ok, nicht durch Nachdenken, sondern durch Rumprobieren habe ich eine Lösung gefunden:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
(progn
(condition-case err
(progn
(message "Hello")
(signal 'error '(Foo bar))
(goto-char (point-min))) ;; Not reached
(error (message "%s" (cdr err))))
(sleep-for 2)
(beginning-of-line))
</font><hr></pre></blockquote>

Cheers,
GNU/Wolfgang

Post Reply