15 Jan 2015, 15:59

Emacs Lisp の例外処理について軽く調べてみた

はじめに

さっき, Java の例外処理について調べて見たので, こんどは Emacs Lisp の例外処理について調べてみた.

文法

error

<div class="outline-text-3" id="text-unnumbered-3">
  <p>
    致命的なエラーが発生した時に利用. 実行中の elisp を強制停止.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (error "%s" "Fatal Error Occured!!!")<br /> [/sourcecode]
  </p>
</div>

signal

<div class="outline-text-3" id="text-unnumbered-4">
  <p>
    エラーシンボルとデータを伴って例外をあげる.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (signal &#8216;wrong-type-argument &#8216;(0))<br /> [/sourcecode]
  </p>

  <p>
    java における throw new HogeException (&#8220;hoge&#8221;);
  </p>
</div>

condition-case

<div class="outline-text-3" id="text-unnumbered-5">
  <p>
    エラーを補足する.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (defun error-test ()<br /> (interactive)<br /> (condition-case error-var<br /> (/ 0 0)<br /> (message "%s" error-var)))<br /> (error-test)<br /> [/sourcecode]
  </p>

  <p>
    java における catch のような役割.
  </p>
</div>

unwind-protect

<div class="outline-text-3" id="text-unnumbered-6">
  <p>
    後処理をする.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221;]<br /> (defun error-test2 ()<br /> (interactive)<br /> (unwind-protect<br /> (/ 0 0)<br /> (message "%s" "you shall die!!")))<br /> (error-test)<br /> [/sourcecode]
  </p>

  <p>
    java における finally のような役割.
  </p>
</div>