Next: Error Symbols, Previous: Processing of Errors, Up: Errors [Contents][Index]
¥¨¥é¡¼¤òÄÌÃΤ¹¤ë¤³¤È¤ÎÉáÄ̤θú²Ì¤Ï¡¢
¼Â¹ÔÃæ¤Î¥³¥Þ¥ó¥É¤ò½ªÎ»¤·¡¢Emacs¤Î¥¨¥Ç¥£¥¿¥³¥Þ¥ó¥É¥ë¡¼¥×¤Ë¤¿¤À¤Á¤ËÌá¤ê¤Þ¤¹¡£
ÆÉ¼Ô¤Î¥×¥í¥°¥é¥à¤Î°ìÉô¤ÇȯÀ¸¤·¤¿¥¨¥é¡¼¤òÊ᪤¹¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¡¢
¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥àcondition-case
¤ò»È¤Ã¤Æ¥¨¥é¡¼¥Ï¥ó¥É¥é¤òÀßÄꤷ¤Þ¤¹¡£
ñ½ã¤ÊÎã¤Ï¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
(condition-case nil (delete-file filename) (error nil))
¤³¤ì¤Ïfilename¤È¤¤¤¦Ì¾Á°¤Î¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Þ¤¹¤¬¡¢
¥¨¥é¡¼¤¬È¯À¸¤¹¤ë¤È¤É¤ó¤Ê¥¨¥é¡¼¤Ç¤âÊ᪤·¤Ænil
¤òÊÖ¤·¤Þ¤¹¡£
condition-case
¤ÎÂè2°ú¿ô¤ò
Êݸ¤ì¤¿¥Õ¥©¡¼¥à¡Êprotected form¡Ë¤È¸Æ¤Ó¤Þ¤¹¡£
¡Ê¾å¤ÎÎã¤Ç¤Ï¡¢Êݸ¤ì¤¿¥Õ¥©¡¼¥à¤Ïdelete-file
¤Î¸Æ¤Ó½Ð¤·¡£¡Ë
¤³¤Î¥Õ¥©¡¼¥à¤Î¼Â¹Ô¤ò³«»Ï¤¹¤ë¤È¥¨¥é¡¼¥Ï¥ó¥É¥é¤¬Í¸ú¤Ë¤Ê¤ê¡¢
¤³¤Î¥Õ¥©¡¼¥à¤«¤éÌá¤ë¤È¥¨¥é¡¼¥Ï¥ó¥É¥é¤Ï¼è¤ê½ü¤«¤ì¤Þ¤¹¡£
¤½¤Î¤¢¤¤¤À¤Ï¡¢¤Ä¤Í¤Ë¥¨¥é¡¼¥Ï¥ó¥É¥é¤Ï͸ú¤Ç¤¹¡£
ÆÃ¤Ë¡¢¤³¤Î¥Õ¥©¡¼¥à¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë´Ø¿ô¤Î¼Â¹ÔÃæ¡¢
¤½¤ì¤é¤Î¥µ¥Ö¥ë¡¼¥Æ¥£¥ó¤Î¼Â¹ÔÃæ¤Ê¤É¤Ë¤Ï¡¢¥¨¥é¡¼¥Ï¥ó¥É¥é¤Ï͸ú¤Ç¤¹¡£
¤³¤ì¤ÏÂçÀڤʤ³¤È¤Ç¡¢¸·Ì©¤Ë¤¤¤¨¤Ð¡¢
¥¨¥é¡¼¤¬ÄÌÃΤµ¤ì¤ë¤Î¤Ï¡¢Êݸ¤ì¤¿¥Õ¥©¡¼¥à¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤¿
¡Êsignal
¤äerror
¤ò´Þ¤à¡ËLisp´ðËÜ´Ø¿ô¤Î¼Â¹ÔÃæ¤Ç¤¢¤Ã¤Æ¡¢
Êݸ¤ì¤¿¥Õ¥©¡¼¥à¤½¤Î¤â¤Î¤«¤é¤Ç¤Ï¤Ê¤¤¤«¤é¤Ç¤¹¡£
Êݸ¤ì¤¿¥Õ¥©¡¼¥à¤Î¤¦¤·¤í¤Ë¤¢¤ë°ú¿ô¤Ï¡¢¥Ï¥ó¥É¥é¤Ç¤¹¡£
³Æ¥Ï¥ó¥É¥é¤Ï1¤Ä°Ê¾å¤Î¡Ê¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡Ë¾ò·ï̾
¡Êcondition names¡Ë¤òÎóµó¤·¡¢½èÍý¤¹¤ë¥¨¥é¡¼¤ò»ØÄꤷ¤Þ¤¹¡£
¥¨¥é¡¼¤¬ÄÌÃΤµ¤ì¤¿¤È¤¤Î¥¨¥é¡¼¥·¥ó¥Ü¥ë¤â¾ò·ï̾¤Î¥ê¥¹¥È¤òÄêµÁ¤·¤Þ¤¹¡£
¤½¤ì¤é¤Ë¶¦Ä̤ξò·ï̾¤¬¤¢¤ë¤È¤¡¢
¥¨¥é¡¼¥Ï¥ó¥É¥é¤¬¥¨¥é¡¼¤ËŬÍѤµ¤ì¤Þ¤¹¡£
¾å¤ÎÎã¤Ç¤Ï¡¢1¤Ä¤Î¥Ï¥ó¥É¥é¤¬¤¢¤ê¡¢¾ò·ï̾¤Ï1¤Ä¡¢error
¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¤³¤Î¾ò·ï̾¤Ï¤¹¤Ù¤Æ¤Î¥¨¥é¡¼¤ò°ÕÌ£¤·¤Þ¤¹¡£
ŬÍѲÄǽ¤Ê¥Ï¥ó¥É¥é¤Îõº÷¤Ç¤Ï¡¢
¤â¤Ã¤È¤âºÇ¶á¤Ë³ÎΩ¤µ¤ì¤¿¥Ï¥ó¥É¥é¤«¤é»Ï¤á¤Æ¡¢
³ÎΩ¤µ¤ì¤¿¤¹¤Ù¤Æ¤Î¥Ï¥ó¥É¥é¤òÄ´¤Ù¤Þ¤¹¡£
¤·¤¿¤¬¤Ã¤Æ¡¢¥Õ¥©¡¼¥àcondition-case
¤¬2¤ÄÆþ¤ì»Ò¤Ë¤Ê¤Ã¤Æ¤¤¤Æ
Ʊ¤¸Ì¾Á°¤Î¥Ï¥ó¥É¥é¤ò³ÎΩ¤·¤Æ¤¤¤ë¤È¡¢Æâ¦¤Î¤â¤Î¤¬¼ÂºÝ¤Ë½èÍý¤ò¼õ¤±»ý¤Á¤Þ¤¹¡£
¥Õ¥©¡¼¥àcondition-case
¤Ç¥¨¥é¡¼¤¬½èÍý¤µ¤ì¤ë¤È¤¤Ë¤Ï¡¢
debug-on-error
¤Ç¥¨¥é¡¼¤Ë¤è¤ê¥Ç¥Ð¥Ã¥¬¤òµ¯Æ°¤¹¤ë¤è¤¦¤Ë»ØÄꤷ¤Æ¤¢¤Ã¤Æ¤â
¥Ç¥Ð¥Ã¥¬¤Ï¼Â¹Ô¤µ¤ì¤Þ¤»¤ó¡£
See Error Debugging¡£
condition-case
¤ÇÊ᪤µ¤ì¤ë¥¨¥é¡¼¤ò¥Ç¥Ð¥Ã¥°¤·¤¿¤¤¤È¤¤Ë¤Ï¡¢
ÊÑ¿ôdebug-on-signal
¤Ënil
°Ê³°¤ÎÃͤòÀßÄꤷ¤Þ¤¹¡£
¥¨¥é¡¼¤ò½èÍý¤Ç¤¤ë¾ì¹ç¤Ë¤Ï¡¢À©¸æ¤Ï¥Ï¥ó¥É¥é¤Ë°Ü¤ê¤Þ¤¹¡£
¤³¤¦¤¹¤ë¤Þ¤¨¤Ë¡¢Emacs¤Ï¡¢È´¤±½Ð¤·ÂоݤȤʤë«ÇûºîÀ®¹½Â¤¤¬ÀßÄꤷ¤¿
¤¹¤Ù¤Æ¤ÎÊÑ¿ô«Çû¤ò²ò¤¡¢È´¤±½Ð¤·ÂоݤȤʤë¥Õ¥©¡¼¥àunwind-protect
¤¹¤Ù¤Æ¤Î¸å»ÏËö¤ò¼Â¹Ô¤·¤Þ¤¹¡£
¥Ï¥ó¥É¥é¤ËÀ©¸æ¤¬°Ü¤ë¤È¡¢¥Ï¥ó¥É¥é¤ÎËÜÂΤò¼Â¹Ô¤·¤Þ¤¹¡£
¥Ï¥ó¥É¥éËÜÂΤμ¹Ԥò´°Î»¤¹¤ë¤È¡¢
¥Õ¥©¡¼¥àcondition-case
¤«¤éÌá¤ê¤Þ¤¹¡£
¥Ï¥ó¥É¥é¤ò¼Â¹Ô¤¹¤ë¤Þ¤¨¤ËÊݸ¤ì¤¿¥Õ¥©¡¼¥à¤«¤é´°Á´¤ËÈ´¤±¤Æ¤¤¤ë¤Î¤Ç¡¢
¥Ï¥ó¥É¥é¤Ç¤Ï¡¢¥¨¥é¡¼È¯À¸»þÅÀ¤«¤éºÆ³«¤·¤¿¤ê¡¢
Êݸ¤ì¤¿¥Õ¥©¡¼¥à¤ÎÆâ¦¤Çºî¤é¤ì¤¿ÊÑ¿ô«Çû¤òÄ´¤Ù¤¿¤ê¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£
¥Ï¥ó¥É¥é¤Ç¤Ç¤¤ë¤³¤È¤Ï¡¢¸å»ÏËö¤ò¤·¤ÆÀè¤Ø¿Ê¤à¤³¤È¤À¤±¤Ç¤¹¡£
condition-case
¹½Â¤¤Ï¡¢insert-file-contents
¤Î¸Æ¤Ó½Ð¤·¤Ç
¥Õ¥¡¥¤¥ë¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤¹¤ë¤Ê¤É¤Îͽ¬²Äǽ¤Ê¥¨¥é¡¼¤òÊ᪤¹¤ë¤¿¤á¤Ë
¤·¤Ð¤·¤Ð»È¤ï¤ì¤Þ¤¹¡£
¥×¥í¥°¥é¥à¤¬¥æ¡¼¥¶¡¼¤«¤éÆÉ¤ß¼è¤Ã¤¿¼°¤òɾ²Á¤¹¤ë¾ì¹ç¤Î¤è¤¦¤Ë¡¢
¤Þ¤Ã¤¿¤¯Í½Â¬ÉÔ²Äǽ¤Ê¥¨¥é¡¼¤òÊ᪤¹¤ë¤¿¤á¤Ë¤â»È¤ï¤ì¤Þ¤¹¡£
¥¨¥é¡¼ÄÌÃΤȥ¨¥é¡¼½èÍý¤Ï¡¢throw
¤Ècatch
¤Ë¿¾¯»÷¤Æ¤¤¤Þ¤¹¤¬¡¢
¤½¤ì¤é¤Ï¤Þ¤Ã¤¿¤¯Ê̤ε¡Ç½¤Ç¤¹¡£
catch
¤Ç¤Ï¥¨¥é¡¼¤òÊ᪤Ǥ¤Þ¤»¤ó¤·¡¢
¥¨¥é¡¼¥Ï¥ó¥É¥é¤Ç¤Ïthrow
¤ò½èÍý¤Ç¤¤Þ¤»¤ó
¡Ê¤·¤«¤·¤Ê¤¬¤é¡¢Å¬ÀÚ¤Êcatch
¤¬¤Ê¤¤throw
¤ò»È¤¦¤È¡¢
½èÍý¤Ç¤¤ë¥¨¥é¡¼¤òÄÌÃΤ¹¤ë¡Ë¡£
¤³¤Î¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Ï¡¢protected-form¤Î¼Â¹ÔÃæ¤Ï
¥¨¥é¡¼¥Ï¥ó¥É¥éhandlers¤ò³ÎΩ¤¹¤ë¡£
protected-form¤¬¥¨¥é¡¼¤Ê¤·¤Ë´°Î»¤¹¤ë¤È¡¢
¤½¤ÎÌá¤êÃͤ¬¥Õ¥©¡¼¥àcondition-case
¤ÎÃͤˤʤ롣
¤³¤Î¾ì¹ç¡¢condition-case
¤Ï¤Ê¤ó¤Î¸ú²Ì¤â¤Ê¤¤¡£
¥Õ¥©¡¼¥àcondition-case
¤Ç°ã¤¤¤¬¤Ç¤ë¤Î¤Ï¡¢
protected-form¤Î¼Â¹ÔÃæ¤Ë¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿¾ì¹ç¤Ç¤¢¤ë¡£
³Æhandlers¤Ï¡¢(conditions body…)
¤Î·Á¼°¤Î
¥ê¥¹¥È¤Ç¤¢¤ë¡£
¤³¤³¤Çconditions¤Ï¡¢½èÍý¤¹¤Ù¤¥¨¥é¡¼¤Î¾ò·ï̾¤«¾ò·ï̾¤Î¥ê¥¹¥È¤Ç¤¢¤ë¡£
body¤Ï1¤Ä°Ê¾å¤ÎLisp¼°¤Ç¤¢¤ê¡¢
¤³¤Î¥Ï¥ó¥É¥é¤¬¥¨¥é¡¼¤ò½èÍý¤¹¤ë¤È¤¤Ë¼Â¹Ô¤µ¤ì¤ë¡£
¥Ï¥ó¥É¥é¤ÎÎã¤ò¼¨¤¹¡£
(error nil) (arith-error (message "Division by zero")) ((arith-error file-error) (message "Either division by zero or failure to open a file"))
À¸µ¯¤¹¤ë³Æ¥¨¥é¡¼¤Ë¤Ï¡¢
¤½¤Î¥¨¥é¡¼¤Î¼ïÎà¤òɽ¤¹¥¨¥é¡¼¥·¥ó¥Ü¥ë¡Êerror symbol¡Ë¤¬¤¢¤ë¡£
¤½¤Î¥·¥ó¥Ü¥ë¤Î°Àerror-conditions
¤Ï¡¢
¾ò·ï̾¤Î¥ê¥¹¥È¤Ç¤¢¤ë¡Êsee Error Symbols¡Ë¡£
Emacs¤Ï¡¢Í¸ú¤Ê¥Õ¥©¡¼¥àcondition-case
¤¹¤Ù¤Æ¤òõº÷¤·¡¢
¤³¤ì¤é¤Î¾ò·ï̾¤ò1¤Ä°Ê¾å»ØÄꤷ¤¿¥Ï¥ó¥É¥é¤òõ¤¹¡£
¤â¤Ã¤È¤âÆâ¦¤Î°ìÃפ¹¤ëcondition-case
¤¬¥¨¥é¡¼¤ò½èÍý¤¹¤ë¡£
¤³¤Îcondition-case
¤ÎÆâ¦¤Ç¤Ï¡¢
ŬÍѲÄǽ¤ÊºÇ½é¤Î¥Ï¥ó¥É¥é¤¬¥¨¥é¡¼¤ò½èÍý¤¹¤ë¡£
¥Ï¥ó¥É¥é¤ÎËÜÂΤμ¹Ԥò´°Î»¤¹¤ë¤È¡¢
condition-case
¤ÏÄ̾ï¤Î¤è¤¦¤ËÌá¤ê¡¢
¥Ï¥ó¥É¥é¤ÎËÜÂΤκǸå¤Î¥Õ¥©¡¼¥à¤ÎÃͤòÁ´ÂΤȤ·¤Æ¤ÎÃͤ˻Ȥ¦¡£
°ú¿ôvar¤ÏÊÑ¿ô¤Ç¤¢¤ë¡£
condition-case
¤Ï¡¢protected-form¤ò¼Â¹Ô¤¹¤ë¤È¤¤Ë¤Ï
¤³¤ÎÊÑ¿ô¤ò«Çû¤»¤º¡¢¥¨¥é¡¼¤ò½èÍý¤¹¤ë¤È¤¤À¤±Â«Çû¤¹¤ë¡£
¤½¤Î¤È¤¡¢var¤Ï¥í¡¼¥«¥ë¤Ë¥¨¥é¡¼µ½Ò
¡Êerror description¡Ë¤Ë«Çû¤µ¤ì¤ë¡£
¤³¤ì¤Ï¡¢¥¨¥é¡¼¤Î¾ÜºÙ¤òÍ¿¤¨¤ë¥ê¥¹¥È¤Ç¤¢¤ë¡£
¥¨¥é¡¼µ½Ò¤Ï¡¢(error-symbol . data)
¤Î·Á¼°¤Ç¤¢¤ë¡£
¥Ï¥ó¥É¥é¤Ï¡¢Æ°ºî¤ò·èÄꤹ¤ë¤¿¤á¤Ë¤³¤Î¥ê¥¹¥È¤ò»²¾È¤Ç¤¤ë¡£
¤¿¤È¤¨¤Ð¡¢¥Õ¥¡¥¤¥ë¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤¿¥¨¥é¡¼¤Ç¤¢¤ì¤Ð¡¢
data¤ÎÂè2Í×ÁÇ¡¢¥¨¥é¡¼µ½Ò¤ÎÂè3Í×ÁǤ¬¥Õ¥¡¥¤¥ë̾¤Ç¤¢¤ë¡£
var¤¬nil
¤Ç¤¢¤ë¤È¡¢ÊÑ¿ô¤ò«Çû¤·¤Ê¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
¤½¤¦¤¹¤ë¤È¡¢¥Ï¥ó¥É¥é¤Ç¤Ï¥¨¥é¡¼¥·¥ó¥Ü¥ë¤È´ØÏ¢¤¹¤ë¥Ç¡¼¥¿¤ò»È¤¨¤Ê¤¤¡£
¤³¤Î´Ø¿ô¤Ï¡¢»ØÄꤷ¤¿¥¨¥é¡¼µ½Ò¤ËÂФ¹¤ë¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸Ê¸»úÎó¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤ËÂФ¹¤ëÉáÄ̤Υ¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Æ¡¢ ¥¨¥é¡¼¤ò½èÍý¤·¤¿¤¤¾ì¹ç¤ËÊØÍø¤Ç¤¢¤ë¡£
¥¼¥í½ü»»¤Î·ë²Ì¤Ç¤¢¤ë¥¨¥é¡¼¤ò½èÍý¤¹¤ëcondition-case
¤Î»ÈÍÑÎã¤ò¼¨¤·¤Þ¤¹¡£
¥Ï¥ó¥É¥é¤Ï¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ò¡Ê¥Ù¥ë¤òÌĤ餵¤º¤Ë¡Ëɽ¼¨¤·¤Æ¡¢
Â礤ʿô¤òÊÖ¤·¤Þ¤¹¡£
(defun safe-divide (dividend divisor)
(condition-case err
;; Êݸ¤ì¤¿¥Õ¥©¡¼¥à
(/ dividend divisor)
;; ¥Ï¥ó¥É¥é (arith-error ; ¾ò·ï ;; ¤³¤Î¥¨¥é¡¼¤ËÂФ¹¤ëÉáÄ̤Υá¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë (message "%s" (error-message-string err)) 1000000))) ⇒ safe-divide
(safe-divide 5 0) -| Arithmetic error: (arith-error) ⇒ 1000000
¥Ï¥ó¥É¥é¤Ï¾ò·ï̾arith-error
¤ò»ØÄꤷ¤Æ¤¤¤ë¤Î¤Ç¡¢
¥¼¥í½ü»»¥¨¥é¡¼¤À¤±¤ò½èÍý¤·¤Þ¤¹¡£
¾¯¤Ê¤¯¤È¤â¤³¤Îcondition-case
¤Ç¤Ï¾¤Î¼ïÎà¤Î¥¨¥é¡¼¤Ï½èÍý¤·¤Þ¤»¤ó¡£
¤·¤¿¤¬¤Ã¤Æ¡¢¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹
(safe-divide nil 3) error→ Wrong type argument: number-or-marker-p, nil
°Ê²¼¤Ï¡¢error
¤ÇÄÌÃΤµ¤ì¤ë¥¨¥é¡¼¤â´Þ¤á¤Æ¡¢
¤¹¤Ù¤Æ¤Î¼ïÎà¤Î¥¨¥é¡¼¤òÊ᪤¹¤ëcondition-case
¤Ç¤¹¡£
(setq baz 34) ⇒ 34
(condition-case err
(if (eq baz 35)
t
;; ¤³¤ì¤Ï´Ø¿ôerror
¤Î¸Æ¤Ó½Ð¤·
(error "Rats! The variable %s was %s, not 35" 'baz baz))
;; ¤³¤ì¤Ï¥Ï¥ó¥É¥é¡£¥Õ¥©¡¼¥à¤Ç¤Ï¤Ê¤¤
(error (princ (format "The error was: %s" err))
2))
-| The error was: (error "Rats! The variable baz was 34, not 35")
⇒ 2
Next: Error Symbols, Previous: Processing of Errors, Up: Errors [Contents][Index]