Previous: Handling Errors, Up: Errors   [Contents][Index]


9.5.3.4 ¥¨¥é¡¼¥·¥ó¥Ü¥ë¤È¾ò·ï̾

¥¨¥é¡¼¤òÄÌÃΤ¹¤ë¤È¤­¤Ë¤Ï¡¢ÆÉ¼Ô¤¬°Õ¿Þ¤¹¤ë¥¨¥é¡¼¤Î¼ïÎà¤ò»ØÄꤹ¤ë ¥¨¥é¡¼¥·¥ó¥Ü¥ë¡Êerror symbol¡Ë¤ò»ØÄꤷ¤Þ¤¹¡£ ³Æ¥¨¥é¡¼¤Ë¤Ï¡¢¤½¤ì¤òʬÎह¤ë°ì°Õ¤Ê̾Á°¤¬¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤Ï¡¢Emacs Lisp¸À¸ì¤ÇÄêµÁ¤µ¤ì¤¿¥¨¥é¡¼¤òºÙʬÎष¤¿¤â¤Î¤Ç¤¹¡£

¤³¤ì¤é¤ÎºÙʬÎà¤Ï¡¢¥¨¥é¡¼¾ò·ï¡Êerror conditions¡Ë¤È¸Æ¤Ð¤ì¤ë ¤è¤êÂ礭¤Ê¥¯¥é¥¹¤Î³¬ÁؤˤޤȤá¤é¤ì¤Æ¤¤¤Þ¤¹¡£ ¥¨¥é¡¼¾ò·ï¤Ï¡¢¾ò·ï̾¡Êcondition names¡Ë¤Ç¼±Ê̤·¤Þ¤¹¡£ ¤â¤Ã¤È¤âºÙ¤«¤¤Ê¬Îà¤Ï¡¢¥¨¥é¡¼¥·¥ó¥Ü¥ë¤½¤Î¤â¤Î¤Ç¤¹¡£ ³Æ¥¨¥é¡¼¥·¥ó¥Ü¥ë¤Ï¾ò·ï̾¤Ç¤â¤¢¤ê¤Þ¤¹¡£ ¤è¤êÂ礭¤Ê¥¯¥é¥¹¤òɽ¤¹¾ò·ï̾error¤â¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤Ï¤¹¤Ù¤Æ¤Î¼ïÎà¤Î¥¨¥é¡¼¤òɽ¤·¤Þ¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢³Æ¥¨¥é¡¼¤Ë¤Ï¡¢1¤Ä°Ê¾å¤Î¾ò·ï̾¤¬¤¢¤ê¤Þ¤¹¡£ ¤Ä¤Þ¤ê¡¢error¡¢error¤È¤ÏÊ̤Υ¨¥é¡¼¥·¥ó¥Ü¥ë¡¢¤¢¤ë¤¤¤Ï¡¢ ¤½¤ÎÃæ´Ö¤ÎʬÎà¤Ë°¤¹¤ë¤â¤Î¤Ç¤¹¡£

¤¢¤ë¥·¥ó¥Ü¥ë¤¬¥¨¥é¡¼¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤¿¤á¤Ë¤Ï¡¢¤½¤Î¥·¥ó¥Ü¥ë¤Ë¤Ï¡¢ ¾ò·ï̾¤Î¥ê¥¹¥È¤òÍ¿¤¨¤ë°À­error-conditions¤¬¤¢¤ë¤³¤È¤¬É¬ÍפǤ¹¡£ ¤³¤Î¥ê¥¹¥È¤Ï¡¢¤½¤Î¥¨¥é¡¼¤¬Â°¤¹¤ë¥¨¥é¡¼¾ò·ï¤òÄêµÁ¤·¤Þ¤¹¡£ ¡Ê¥¨¥é¡¼¥·¥ó¥Ü¥ë¤½¤Î¤â¤Î¤È¡¢¥·¥ó¥Ü¥ëerror¤Ï¡¢ ¤Ä¤Í¤Ë¤³¤Î¥ê¥¹¥È¤ÎÍ×ÁǤǤ¢¤ë¤³¤È¡£¡Ë ¤·¤¿¤¬¤Ã¤Æ¡¢¾ò·ï̾¤Î³¬Áؤϡ¢ ¥¨¥é¡¼¥·¥ó¥Ü¥ë¤Î°À­error-conditions¤ÇÄêµÁ¤µ¤ì¤Þ¤¹¡£

error-conditions¥ê¥¹¥È¤Ë²Ã¤¨¤Æ¡¢ ¥¨¥é¡¼¥·¥ó¥Ü¥ë¤Ë¤Ï¡¢Â°À­error-message¤âɬÍפǤ¹¡£ ¤³¤Î°À­¤ÎÃͤϡ¢¤½¤Î¥¨¥é¡¼¤¬½èÍý¤µ¤ì¤Ê¤¤¤È¤­¤Ëɽ¼¨¤µ¤ì¤ëʸ»úÎó¤Ç¤¹¡£ °À­error-message¤¬¤¢¤ë¤Î¤Ë¡¢¤½¤ì¤¬Ê¸»úÎó¤Ç¤Ê¤±¤ì¤Ð¡¢ ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸‘peculiar error’¤ò»È¤¤¤Þ¤¹¡£

°Ê²¼¤Ë¡¢¿·¤¿¤Ê¥¨¥é¡¼¥·¥ó¥Ü¥ënew-error¤ÎÄêµÁÊýË¡¤ò¼¨¤·¤Þ¤¹¡£

(put 'new-error
     'error-conditions
     '(error my-own-errors new-error))       
⇒ (error my-own-errors new-error)
(put 'new-error 'error-message "A new error")
⇒ "A new error"

¤³¤Î¥¨¥é¡¼¤Ë¤Ï¡¢3¤Ä¤Î¾ò·ï̾¤¬¤¢¤ê¤Þ¤¹¡£ ¤â¤Ã¤È¤âºÙ¤«¤¤Ê¬Îà¤Ç¤¢¤ënew-error¡¢ ¤½¤ì¤è¤êÂ礭¤ÊʬÎà¤È¤Ç¤¢¤ë¤È¹Í¤¨¤Æ¤¤¤ëmy-own-error¡¢ ¤â¤Ã¤È¤âÂ礭¤ÊʬÎà¤Ç¤¢¤ëerror¤Ç¤¹¡£

¥¨¥é¡¼Ê¸»úÎó¤ÏÂçʸ»ú¤Ç»Ï¤á¤ë¤Ù¤­¤Ç¤¹¤¬¡¢¥Ô¥ê¥ª¥É¤Ç½ª¤¨¤Þ¤»¤ó¡£ ¤³¤ì¤Ï¡¢Emacs¤Î¾¤Î´·½¬¤ÈÀ°¹ç¤ò¤È¤ë¤¿¤á¤Ç¤¹¡£

ÉáÄÌ¡¢Emacs¼«¿È¤¬new-error¤òÄÌÃΤ¹¤ë¤³¤È¤Ï¤¢¤ê¤¨¤Þ¤»¤ó¡£ ¤Ä¤®¤Î¤è¤¦¤Ë¡¢ÆÉ¼Ô¤Î¥³¡¼¥É¤ÇÌÀ¼¨Åª¤Ë signal¡Êsee Signaling Errors¡Ë¤ò¸Æ¤ó¤À¤È¤­¤À¤±¤Ç¤¹¡£

(signal 'new-error '(x y))
     error→ A new error: x, y

¤³¤Î¥¨¥é¡¼¤Ï¡¢3¤Ä¤Î¾ò·ï̾¤Î¤É¤ì¤Ç¤â½èÍý¤Ç¤­¤Þ¤¹¡£ ¤Ä¤®¤ÎÎã¤Ï¡¢new-error¤È ¥¯¥é¥¹my-own-errors¤ÎǤ°Õ¤Î¾¤Î¥¨¥é¡¼¤ò½èÍý¤·¤Þ¤¹¡£

(condition-case foo
    (bar nil t)
  (my-own-errors nil))

¥¨¥é¡¼¤òʬÎह¤ë½ÅÍפÊÊýË¡¤Ï¡¢¤½¤ì¤é¤Î¾ò·ï̾¤Ë¤è¤ë¤³¤È¤Ç¤¹¡£ ¤Ä¤Þ¤ê¡¢¥¨¥é¡¼¤Ë°ìÃפ¹¤ë¥Ï¥ó¥É¥é¤òõ¤¹¤¿¤á¤Ë¾ò·ï̾¤ò»È¤¤¤Þ¤¹¡£ ¥¨¥é¡¼¥·¥ó¥Ü¥ë¤Ï¡¢°Õ¿Þ¤·¤¿¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤È¾ò·ï̾¤Î¥ê¥¹¥È¤ò»ØÄꤹ¤ë ´ÊÊØ¤ÊÊýË¡¤òÄ󶡤¹¤ë¤À¤±¤Ç¤¹¡£ signal¤Ë¡¢1¤Ä¤Î¥¨¥é¡¼¥·¥ó¥Ü¥ë¤Ç¤Ï¤Ê¤¯¡¢ ¾ò·ï̾¤Î¥ê¥¹¥È¤ò»ØÄꤹ¤ë¤Î¤Ç¤Ï¤ï¤º¤é¤ï¤·¤¤¤Ç¤·¤ç¤¦¡£

°ìÊý¡¢¾ò·ï̾¤Ê¤·¤Ë¥¨¥é¡¼¥·¥ó¥Ü¥ë¤À¤±¤ò»È¤¦¤Î¤Ç¤Ï¡¢ condition-case¤ÎǽÎϤò¤¤¤Á¤¸¤ë¤·¤¯Â»¤Ê¤¤¤Þ¤¹¡£ ¾ò·ï̾¤¬¤¢¤ë¤³¤È¤Ç¡¢¥¨¥é¡¼¥Ï¥ó¥É¥é¤ò½ñ¤¯¤È¤­¤Ë¤µ¤Þ¤¶¤Þ¤Ê¥ì¥Ù¥ë¤Ë °ìÈ̲½¤·¤Æ¥¨¥é¡¼¤òʬÎà¤Ç¤­¤ë¤Î¤Ç¤¹¡£ ¥¨¥é¡¼¥·¥ó¥Ü¥ë¤À¤±¤ò»È¤Ã¤¿¤Î¤Ç¤Ï¡¢ ºÇºÙʬÎà°Ê³°¤Î¥ì¥Ù¥ë¤òºï½ü¤·¤Æ¤·¤Þ¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

¤¹¤Ù¤Æ¤Îɸ½à¥¨¥é¡¼Ì¾¤È¤½¤ì¤é¤Î¾ò·ï̾¤Ë¤Ä¤¤¤Æ¤Ï¡¢ See Standard Errors¡£