¿¡·¯¸¦ ´Ù·ç±â

¿ì¸®´Â ¹«¾ùÀ» ´Ù·ê °ÍÀΰ¡?
  • ¿¡·¯¸¦ ´Ù·ç´Â µÎ °¡Áö ¹æ¹ý
  • ´Ù¸¥ »ç¶÷µéÀÌ ÀâÀ» ¼ö ÀÖµµ·Ï ¿ì¸®ÀÇ Äڵ忡¼­ ¿¡·¯¸¦ µé¾î¿Ã¸®±â
  • ÀüÅëÀûÀÎ ¹æ¹ý

    ÀüÅëÀûÀ¸·Î ÇÁ·Î±×·¡¸Ó°¡ ÀÛ¾÷À» ÇÒ¶§´Â, ¿¹¸¦ µé¾î ÇÔ¼ö¸¦ È£ÃâÇÒ¶§´Â, ÇÔ¼öÀÇ °á°ú´Â À¯È¿¼ºÀ» °ËÁõ¹ÞÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¿©·¯ºÐÀÌ Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀ» ¿­·Á°í ÇÑ´Ù¸é ¹Ýȯ°ªÀº NULL °ªÀÌ µÉ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ Á¾·ùÀÇ »óȲÀ» ´Ù·ç´Â µ¥´Â µÎ °³ÀÇ ÀϹÝÀûÀÎ Àü·«ÀÌ ÀÖ´Ù:

    1. ÇÔ¼öÀÇ °á°ú¿¡ ¿¡·¯Äڵ带 Æ÷ÇÔÇϰųª ȤÀº
    2. ¿¡·¯ÀÇ »óÅ¿¡ ´ëÇÏ¿© Àü¿ª º¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.

    ¾î¶² °æ¿ì¿¡³ª ¿¡·¯°¡ ÀϾ´ÂÁö ¾Ë¾Æº¸°Å³ª ÀûÀýÇÑ Á¶Ä¡¸¦ ÃëÇÏ´Â °ÍÀº ÇÁ·Î±×·¡¸ÓÀÇ Ã¥ÀÓÀÌ´Ù.

    BASIC¿¡¼­ ÀÌ°ÍÀº ´ÙÀ½°ú °°ÀÌ º¸ÀδÙ:

    OPEN "A:\DATA.TXT" FOR INPUT AS #1
    IF ERR = 53 THEN
       CALL FileNotFoundError
    ELSE
       REM CONTINUE WITH FILE HANDLING HERE
    END IF
    

    ÀÌ°ÍÀº ÁúÁÁÀº ÇÁ·Î±×·¥À» »ý»êÇÑ °á°ú°¡ µÉ ¼öµµ Àִµ¥ ÄÚµåÀÇ Àý¹ÝÀÌ»óÀÌ ¸ðµç ÀÛµ¿µéÀÌ ¼º°øÇß´ÂÁö Á¡°ËÇϴµ¥ Á¡À¯µÈ´Ù. ÀÌ°ÍÀº ¼º°¡½Ã¸ç ±× Äڵ带 Àб⿡ ¾î·Æ°Ô ¸¸µç´Ù (±×·¯³ª ½ÇÁ¦·Î ±×°ÍÀº ´ë´Ù¼öÀÇ ÇÁ·Î±×·¥µéÀÌ ¿À´Ã³¯ ÀÛµ¿ÇÏ´Â ¹æ½ÄÀÌ´Ù.) ¸»µµ ¾ÈµÇ´Â ½Ç¼ö¸¦ ÇÇÇÏ°íÀÚ ÇÑ´Ù¸é ÀÏ°üÀûÀÎ Á¢±Ù¹ýÀº ÇʼöÀûÀÌ´Ù.

    ¿¹¿ÜÀûÀÎ ¹æ¹ý

    ´õ¿í ¸¹Àº ÃÖ±ÙÀÇ ÇÁ·Î±×·¡¹Ö ȯ°æ¿¡¼­ ¿¡·¯¸¦ ´Ù·ç´Â ´ë¾ÈÀûÀÎ ¹æ¹ýÀÌ °³¹ß µÇ¾ú´Ù. ÀÌ°ÍÀº ¿¹¿Üó¸® ¶ó°í ºÒ¸®´Â °ÍÀ¸·Î ¿¡·¯¸¦ ¹ö¸®°Å³ª( throw) ȤÀº µé¾î¿Ã¸®°Å³ª(raise) ÇÔÀ¸·Î½á ÀÛµ¿ÇÑ´Ù. ±×·¯¸é ½Ã½ºÅÛÀº ÇöÀçÀÇ ÄÚµå ºí·ÏÀ» Å»ÃâÇÏ¿© °¡Àå °¡±î¿î ¿¹¿Üó¸® ºí·ÏÀ¸·Î °­Á¦ÀûÀ¸·Î Á¡ÇÁÇÑ´Ù. ½Ã½ºÅÛÀº ¸ðµç ¿¹¿Ü»óȲÀ» ³ªÆ÷ÇÏ´Â catches ±âº» 󸮱⸦ Á¦°øÇÏ¸ç º¸Åë ¿¡·¯¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ°í Á¾·áÇÑ´Ù.

    ¿¹¿Üó¸® ºí·ÏÀº ¾à°£Àº if...then...else ºí·Ï°ú ºñ½ÁÇÏ°Ô ÄÚµùµÈ´Ù:

    try:
       # program logic goes here
    except ExceptionType:
       # exception processing for named exception goes here
    except AnotherType:
       # exception processing for a different exception goes here
    else:
       # here we tidy up if NO exceptions are raised
    

    ¿ì¸®°¡ ¿¡·¯¹ß»ý ÈÄ¿¡ ¸»²ûÇÏ°Ô Á¤¸®ÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ´Â ¶Ç ´Ù¸¥ ÇüÅÂÀÇ '¿¹¿Ü' ºí·ÏÀÌ ÀÖµð. ±×°ÍÀ» try...finally ºí·ÏÀ̶ó ºÎ¸£¸ç ÀüÇüÀûÀ¸·Î ÆÄÀÏÀ» ´Ý°í, ¹öÆÛ¸¦ µð½ºÅ©¿¡ °­Á¦·Î ¾²´Â µîµî¿¡ »ç¿ëµÈ´Ù. finally ºí·ÏÀº try¼½¼Ç¿¡¼­ ¹«½¼ÀÏÀÌ ÀϾµçÁö °£¿¡ ¸¶Áö¸·À¸·Î Ç×»ó ½ÇÇàµÈ´Ù.

    try:
       # normal program logic
    finally:
       # here we tidy up regardless of the
       # success/failure of the try block
    

    ƼŬÀº catch Å°¿öµå¸¦ »ç¿ëÇÏ¿© ¾î´ÀÁ¤µµ´Â ºñ½ÁÇÑ ¸ÞÄ«´ÏÁòÀ» °¡Áø´Ù:

    set errorcode [catch {
        unset x
        } msg ]
    if {$errorcode != 0} {
        # handle error here
        }
    

    ÀÌ °æ¿ì¿¡ x ´Â Á¸ÀçÇÏÁö ¾Ê´Â´Ù ±×·¡¼­ ¿ì¸®´Â ±×°ÍÀ» ¼³Á¤Ãë¼Ò unset ÇÒ ¼ö ¾ø´Ù. ƼŬÀº ¿¹¿Ü¸¦ ¹ß»ý½ÃÅ°Áö¸¸ catch´Â ÇÁ·Î±×·¥ÀÌ Ãë¼ÒµÇÁö ¾Êµµ·Ï ÇÏ¸ç ´ë½Å¿¡ ¿¡·¯¸Þ½ÃÁö¸¦ msgº¯¼ö¿¡ Áý¾î ³Ö°í 0 ÀÌ ¾Æ´Ñ °ªÀ» ¹ÝȯÇÑ´Ù (±×°ÍÀº ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇؼ­ Á¤ÀÇµÉ ¼ö ÀÖ´Ù.). ¿©·¯ºÐÀº ±×·¯¸é errorcode¿¡ ³ªÆ÷µÈ ¹Ýȯ°ªÀ» Á¡°ËÇÒ ¼ö ÀÖ´Ù. ¸¸¾à 0 ÀÌ ¾Æ´Ï¶ó¸é ±×·¯¸é ¿¡·¯°¡ ¹ß»ýµÇ¾ú°í ¿©·¯ºÐÀº msgº¯¼ö¸¦ Á¶»çÇÒ ¼ö ÀÖ´Ù.

    º£ÀÌÁ÷Àº ¿¹¿Ü 󸮸¦ Áö¿øÇÏÁö ¾ÊÁö¸¸ ±×·¯³ª Äڵ带 ±ú²ýÇÏ°Ô À¯ÁöÇϴµ¥ µµ¿òÀ» ÁÖ´Â ±¸Á¶¸¦ °¡Áö°í ÀÖ´Ù:

    100 OPEN "A:\Temp.dat" FOR INPUT AS #1
    110 ON ERROR GOTO 10010
    120 REM PROGRAM CODE HERE...
    130 ...
    10000 REM ERRORHANDLERS:
    10010 IF ERR = 54 THEN....
    

    ¶óÀÎ ³Ñ¹öÀÇ »ç¿ëÀ» ÁÖ¸ñÇ϶ó. ÀÌ°ÍÀº ÃʱâÀÇ º£ÀÌÁ÷À» Æ÷ÇÔÇÏ¿© ¿¹ÀüÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­´Â ÀϹÝÀûÀÎ °ÍÀ̾ú´Ù. ÀÌÁ¦ ¿©·¯ºÐÀº ¶óº§labels·Î °°Àº ÀÏÀ» ÇÒ ¼ö ÀÖ´Ù:

    ON ERROR GOTO Handler
    REM Now create divide by zero error
    x = 5/0
    Handler:
       IF ERR = 23 THEN
          PRINT "Can't divide by 0"
          x = 0
          RESUME NEXT
       END IF
    

    RESUME NEXTÀ» ÁÖ¸ñÇ϶ó. ±×°ÍÀ¸·Î ¿©·¯ºÐÀº ¿¡·¯°¡ ¹ß»ýÇÑ ¹Ù·Î µÚ·Î º¹±ÍÇÏ¿© ±× ÇÁ·Î±×·¥À» °è¼ÓÁøÇàÇÒ ¼ö ÀÖ´Ù.

    ¿¡·¯¸¦ µé¾î¿Ã¸®±â

    ¿ì¸®°¡ ´Ù¸¥ »ç¶÷µéÀÌ ³ªÆ÷ÇÒ ¼ö ÀÖµµ·Ï ¿¹¿Ü»óȲÀ», ¿¹¸¦ µé¾î ¸ðµâ¿¡¼­ ¸¸µé±â¸¦ ¿øÇÑ´Ù¸é ¹«½¼ÀÏÀÌ ÀϾ´Â°¡? ÀÌ °æ¿ì¿¡ ¿ì¸®´Â ÆÄÀ̽㿡 ÀÖ´Â raiseÅ°¿öµå¸¦ »ç¿ëÇÑ´Ù:

    numerator = 42
    denominator = input("What value will I divide 42 by?")
    if denominator == 0:
       raise "zero denominator"
    

    ÀÌ°ÍÀº ¹®ÀÚ¿­ °´Ã¼ ¿¹¿Ü¸¦ µé¾î¿Ã·Á try/except ºí·ÏÀÌ ³ªÆ÷ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.

    TclÀÇ ¿¡·¯ ¸ÞÄ«´ÏÁò

    Tcl¿¡¼­ return ¼­¼ú¹®Àº ¼±ÅÃÀûÀÎ -code Ç÷¡±×¸¦ ÃëÇϴµ¥ ±×°ÍÀº °ýÈ£ÃÄÁø catch¿¡ ÀÇÇؼ­ ³ªÆ÷µÇ¾î Áø´Ù:

    proc spam {val} {
            set x $val
            return -code 3 [expr $x]
            }
    set err [catch {
                   set foo [spam 7]
                   } msg]
    

    err ´Â °ª 3À» °¡Á®¾ß Çϸç msg´Â °ª 7À» °¡Á®¾ß ÇÑ´Ù. ¶Ç ´Ù½Ã ƼŬÀÇ ±¸¹®Àº ÀÌÀü¿¡ ±×·¨´ø °Í º¸´Ù´Â ´ú Á÷°üÀûÀÌ´Ù

    BASICÀÇ ¿¡·¯ ó¸®

    º£ÀÌÁ÷¿¡¼­ ¿©·¯ºÐÀº ERR º¯¼ö¸¦ ERROR ¼­¼ú¹®À¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù:

    ON ERROR GOTO ERRORS
    INPUT "INPUT ERROR CODE"; E
    ERROR E
    
    ERRORS:
    IF ERR = 142 THEN
        PRINT "Error 142 found"
        STOP
    ELSE
        PRINT "No error found"
        STOP
    END IF
    
    


    ±â¾ïÇØ¾ß ÇÒ °Í
  • if ¼­¼ú¹®À» »ç¿ëÇÏ¿© ¿¡·¯Äڵ带 Á¡°ËÇ϶ó
  • exceptÀý·Î ¿¹¿Ü»óȲÀ» ó¸®Ç϶ó
  • raise Å°¿öµå¸¦ »ç¿ëÇÏ¿© ¿¹¿Ü»óȲÀ» ¼³Á¤Ç϶ó
  • ¿¡·¯´Â ´Ü¼øÇÑ ¹®ÀÚ¿­ÀÏ ¼ö ÀÖ´Ù.
  • Previous  Next  Contents


    ÀÌ ÆäÀÌÁö¿¡ ´ëÇÏ¿© Áú¹® ȤÀº Á¦¾È»çÇ×ÀÌ ÀÖÀ¸¸é ´ÙÀ½ ÁÖ¼Ò·Î ³ª¿¡°Ô ÀüÀÚ¸ÞÀÏÀ» º¸³»¶ó: agauld@crosswinds.net