8. ¿¹¿Ü(exception)

(¾´ ³¯ : 2001-07-25)

 

Á¦°¡ °¡²û ¸»¾¸µå·ÈÁö¸¸ ¾ð¾î¸¦ ¹è¿ï ¶§´Â Á÷Á¢ µû¶óÇØº¸°í, ¸¸µé¾îº¸´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù.

¿©·¯ºÐµµ Áö±Ý±îÁö ÇÔ²² °øºÎÇϸ鼭 ¿¬½ÀÀ» ¸¹ÀÌ ÇØº¸¼Ì°ÚÁÒ?

±×·¸´Ù¸é ¾Æ·¡¿Í °°Àº ¸Þ½ÃÁöµµ ¸¹ÀÌ º¸¼Ì°Ú³×¿ä.

 

>>> print ¹æ°¡~

  File "<stdin>", line 1

    print ¹æ°¡~

          ^

SyntaxError: invalid syntax

 

À§¿¡¼± ¡®¹æ°¡~¡¯¶ó´Â ¹®ÀÚ¿­À» Ãâ·ÂÇÏ·Á°í Çߴµ¥, ¹º°¡ ¹®Á¦°¡ »ý±ä °Í °°ÁÒ?

¸Þ½ÃÁö°¡ ³­ÇØÇÑ °Í °°Àºµ¥¡¦ ¹«½¼ ¶æÀÎÁö ÇØµ¶À» ÇØº¼±î¿ä?

 

File "<stdin>", line 1

<stdin> ÆÄÀÏÀÇ 1¹øÂ° ÁÙ¿¡¼­

 

print ¹æ°¡~

      ^

^·Î Ç¥½ÃµÈ ºÎºÐ¿¡

 

SyntaxError: invalid syntax

À߸øµÈ ±¸¹®À¸·Î ÀÎÇØ ¿À·ù°¡ ¹ß»ýÇßÀ½

 

ÇÑ ¸¶µð·Î ¹®¹ýÀÌ Æ²·È´Ù´Â ¾ê±â±º¿ä.

¿©±â¼­ <stdin>À̶ó´Â °Ç Ç¥ÁØ ÀÔ·Â, Áï Űº¸µå¸¦ ÅëÇØ ÀԷµǴ °ÍÀ» ¶æÇÕ´Ï´Ù.

´ëÈ­½ÄÀ¸·Î ÀÛ¼ºÇÏÁö ¾Ê°í ÆÄÀÏ·Î ÀÛ¼ºÇؼ­ ½ÇÇà½ÃÄ×´Ù¸é ±× ÆÄÀÏÀÇ À̸§ÀÌ ³ª¿Ô°ÚÁö¿ä.

 

ÀÌ·¸°Ô ÆÄÀ̽ãÀº ÇÁ·Î±×·¥ ½ÇÇà Áß¿¡ ¹®Á¦°¡ »ý±â¸é, ¾îµð°¡ ¾î¶»°Ô À߸øµÆ´ÂÁö ÆÇ´ÜÇØ¼­ ¿ì¸®¿¡°Ô ¾Ë·ÁÁÝ´Ï´Ù.

±×·¯¸é ¿ì¸®´Â ±× ºÎºÐÀ» ¼öÁ¤Çؼ­ Àß ÀÛµ¿Çϵµ·Ï ÇÏ¸é µÇÁö¿ä.

 

±×·±µ¥, ÇÁ·Î±×·¥À» Â¥´Ùº¸¸é Æò¼Ò¿¡´Â Àß µ¹¾Æ°¡´Ù°¡ °¡²û¾¿ ¹®Á¦°¡ »ý±â´Â °æ¿ìµµ ÀÖ´ä´Ï´Ù.

´ÙÀ½ÀÇ ¿¹Á¦°¡ ¹Ù·Î ±×·± °æ¿ìÀä, µÎ ¼ö¸¦ °öÇÏ°í ³ª´²¼­ ´õÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.

 

>>> def f(a, b):

...   return (a * b) + (a / b)

...

>>> f(4,2)

10

 

¾ÆÁ÷Àº º°´Ù¸¥ ¹®Á¦°¡ ¾ø¾îº¸ÀÌÁÒ?

ÇÏÁö¸¸ µÎ ¹øÂ° ÀÎÀÚ·Î 0À» ³Ñ°ÜÁÖ¸é ³­¸®°¡ ³³´Ï´Ù.

 

>>> f(3,0)

Traceback (most recent call last):

  File "<stdin>", line 1, in ?

  File "<stdin>", line 2, in f

ZeroDivisionError: integer division or modulo by zero

 

Á¤¼ö¸¦ 0À¸·Î ³ª´©´Â ¿À·ù°¡ ¹ß»ýÇß´Ù°í Çϴ±º¿ä.

¿ø·¡ ¼ýÀÚ¸¦ 0À¸·Î ³ª´­ ¼ö°¡ ¾øÁÒ?

±×·¸´Ù¸é ÀÌ ÇÔ¼ö´Â ¼ÕÀ» Á» ºÁ¾ß°Ú³×¿ä.

 

>>> def f(a, b):

...   if a and b:                 # a¿Í b°¡ µÑ ´Ù 0ÀÌ ¾Æ´Ò ¶§

...     return (a * b) + (a / b)

...   elif a:                      # ±×·¸Áö ¾Ê°í a¸¸ 0ÀÌ ¾Æ´Ò ¶§

...     return 'ºÒ´É'

...   else:                        # µÑ ´Ù 0ÀÏ ¶§

...     return 'ºÎÁ¤'

...

 

ÀÌÁ¦ Á» ±×·² µí Çϳ׿ä.

 

>>> print f(3,0)

ºÒ´É

>>> print f(0,0)

ºÎÁ¤

>>>

 

OXÄûÁî!! ÀÌÁ¦ ÀÌ ÇÔ¼ö´Â ´õ ÀÌ»ó ¿À·ù°¡ »ý±æ ÀÏÀÌ ¾ø°ÚÁÒ?

±×·¸´Ù±¸¿ä?

 

°ú¿¬ ±×·²±î¿ä¡¦

 

>>> f(300000, 500000)

Traceback (most recent call last):

  File "<stdin>", line 1, in ?

  File "<stdin>", line 3, in f

OverflowError: integer multiplication

 

ÀÎÀÚ·Î ¹ÞÀº µÎ ¼öÀÇ °öÀÌ Á¤¼öÇüÀ¸·Î ó¸®Çϱ⿡´Â ³Ê¹« Å« °ªÀÌ¶ó¼­ ¿À·ù°¡ ¹ßÇàÇß±º¿ä.

 

À½¡¦ ¶Ç ÀÌ·± °Ç¡¦?

 

>>> f(À̽Ê, ¿À)

#%$^*#<%@??? --;

 

ÂÁ¡¦

 

ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Ùº¸¸é ¿À·ù°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Â °æ¿ì´Â ³¡µµ ¾ø½À´Ï´Ù.

¿ì¸®°¡ ÀÌ·± ¿À·ù¸¦ ¸ðµÎ ¿¹»óÇØ¼­ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù´Â °ÍÀº Á¤¸»·Î ¡®³ë°¡´Ù¡¯¶ó°í ¹Û¿¡ ÇÒ ¼ö ¾ø°Ú³×¿ä.

¾ÕÀÇ ¿¹¿¡¼­ ºÒ´É°ú ºÎÁ¤À» Á¤ÇØÁØ °ÍÀº ³ª»ÚÁö ¾Ê´Ù°í ÇÏ´õ¶óµµ, ´Ù¸¥ µÎ °æ¿ì±îÁö °¢°¢ ó¸®ÇØÁÖ´Â °Ç ½Ã°£ ³¶ºñÀ̰ÚÁÒ?

 

´ÙÇàÈ÷ ÆÄÀ̽㿡¼± ÀÌ·± ¹®Á¦¸¦ ½±°Ô ÇØ°áÇØÁÖ´Â ¹æ¹ýÀÌ ÀÖ´ä´Ï´Ù.

À§¿Í °°ÀÌ ÇÁ·Î±×·¡¸ÓÀÇ Àǵµ¿Í µ¿¶³¾îÁø »óȲÀÌ ¹ß»ýÇÏ´Â °ÍÀ» ¿¹¿Ü(exception)¶ó°í ÇØ¼­, ¿¹¿Ü°¡ ¹ß»ýÇÏ¸é ¾î¶² Á¶Ä¡¸¦ ÃëÇÒ °ÍÀÎÁö Á¤ÇØÁÖ´Â °ÍÀÌÁÒ.

 

±×·³ ¿¹¿Ü¸¦ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÔ¼ö¸¦ ¼öÁ¤ÇØ º¸µµ·Ï ÇÏÁö¿ä.

 

>>> def f(a, b):

...   try:

...     if a and b:

...       return (a * b) + (a / b)

...     elif a:

...       return 'ºÒ´É'

...     else:

...       return 'ºÎÁ¤'

...   except:

...     return '¶È ¹Ù·Î »ì¾Æ¶ó'

 

º¸½Ã´Â °Íó·³ ¹æ¹ýÀº °£´ÜÇÕ´Ï´Ù.

±âº»ÀûÀÎ ¹®ÀåµéÀ» try ¹Ø¿¡ ³Ö¾îÁÖ°í, ¿¹¿Ü°¡ ¹ß»ýÇßÀ» ¶§ ó¸®ÇÒ ºÎºÐÀº except ¹Ø¿¡ ³Ö¾îÁÖ¸é µË´Ï´Ù.

ÀÏ´Ü ½Ãµµ(try)ÇØº¸´Ù°¡ ¹®Á¦°¡ »ý±â¸é(except) ó¸®ÇØÁÖ´Â °ÍÀÌÁÒ.

 

¿¹¿Ü´Â ¿À·ù(error)º¸´Ù ´õ ³ÐÀº °³³äÀ̱ä ÇÏÁö¸¸ Áö±ÝÀº ºñ½ÁÇÏ°Ô »ý°¢Çϼŵµ µÇ±¸¿ä, C++°ú Java¿¡¼­µµ ºñ½ÁÇÏ°Ô »ç¿ëµÈ´ä´Ï´Ù.

 

»õº® ¼¼ ½Ã°¡ ³Ñ¾î¹ö·È³×¿ä.

¾îÁ¦ ½¬±â´Â ÇßÁö¸¸ ¿À´Ã ÇÏ·ç´Â ¶Ç Ä¿ÇÇ ¸Ô°í ¸É¸É~ÇØ¾ß°Ú¾î¿ä.

±×·³ ÁÁÀº ÇÏ·ç µÇ¼¼¿ä~.