1 ๋ถ„ ์†Œ์š”

try ~ except๋ฌธ

try ~ except ๋Š” ํŒŒ์ด์ฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฌธ๋ฒ•์ด๋‹ค.

๋น„์Šทํ•œ ๊ฒฝ์šฐ๋กœ๋Š” java์—์„œ try ~ catch๊ฐ€ ์žˆ๋‹ค.

try ~ except๋ฌธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

try:
		์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ
except ValueError:
		์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐฉ์‹

์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ์—๋Š” ์ผ๋ฐ˜์ ์ธ ๋กœ์ง์ด ๋“ค์–ด๊ฐ€๋ฉด ๋œ๋‹ค.

์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๋ถ€๋ถ„์—๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์–ด๋–ค ๋ฉ”์‹œ์ง€ ํ˜น์€ ๊ฐ’ ๋“ฑ์„ ๋ฐ˜ํ™˜ ์‹œํ‚ฌ์ง€ ์ ์œผ๋ฉด ๋œ๋‹ค.

ErrorList

  • AssertionError:ย assertย ๋ฌธ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
  • IndexError: ์ฐธ์กฐ ํ•˜๋ ค๋Š”ย ์ธ๋ฑ์Šค๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ๋•Œย ๋ฐœ์ƒํ•œ๋‹ค.
  • KeyError: ์ฐธ์กฐ ํ•˜๋ ค๋Š”ย ํ‚ค๊ฐ€ ๊ธฐ์กด ํ‚ค ์ง‘ํ•ฉ์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œย ๋ฐœ์ƒํ•œ๋‹ค.
  • KeyboardInterrupt: ์‚ฌ์šฉ์ž๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ ํ‚ค(Control + C, ํ˜น์€ย Delete)๋ฅผ ๋ˆ„๋ฅผ ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ชจ๋“  Exception์„ ์žก๋Š” ์ฝ”๋“œ์— ์˜ํ•ด ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์ง€ ๋ชปํ•˜๋„๋กย Exceptionย ์ƒ์œ„์— ์žˆ๋Š”ย BaseException์„ ์ง์ ‘ ๊ณ„์Šนํ•œ๋‹ค.
  • MemoryError: ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜์ง€๋งŒ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ผ๋ถ€ ๊ฐ์ฒด์˜ ์‚ญ์ œ๋ฅผ ํ•จ์œผ๋กœ์จ ๋ณต๊ตฌ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค.
  • NameError: ์ฐธ์กฐํ•˜๋Š” ์ง€์—ญ, ์ „์—ญ ๋ณ€์ˆ˜ ํ˜น์€ ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์„ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
  • OSError: ์‹œ์Šคํ…œ ํ•จ์ˆ˜๊ฐ€ย ์‹œ์Šคํ…œ ๊ด€๋ จ ์—๋Ÿฌ๋ฅผ ๋Œ๋ ค์ค„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. (ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํ˜น์€ ๋””์Šคํฌ ์šฉ๋Ÿ‰์ด ์—†๋Š” ๊ฒฝ์šฐ)
  • OverflowError: ์‚ฐ์ˆ  ์—ฐ์‚ฐ์˜ย ๊ฒฐ๊ณผ๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œย ํ‘œํ˜„ ํ•  ์ˆ˜ ์—†์„ ๋•Œ, ํ˜น์€ย ์ •์ˆ˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์„ ๋•Œย ๋ฐœ์ƒํ•œ๋‹ค.
  • RecursionError: ์ตœ๋Œ€ย ์žฌ๊ท€ ๊นŠ์ด๊ฐ€ ์ดˆ๊ณผํ•˜์˜€์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
  • TypeError: ์—ฐ์‚ฐ์ด๋‚˜ ํ•จ์ˆ˜๊ฐ€ย ๋ถ€์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ๊ฐ์ฒด์— ์ ์šฉ ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
  • ValueError: ์—ฐ์‚ฐ์ด๋‚˜ ํ•จ์ˆ˜๊ฐ€ย ๋ถ€์ ์ ˆํ•œ ๊ฐ’์„ ๊ฐ€์ง„ย ๊ฐ์ฒด์— ์ ์šฉ ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
  • ZeroDivisionError: ๋‚˜๋ˆ„๊ธฐ, ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์˜ย ๋‘ ๋ฒˆ์งธ ์ธ์ž๊ฐ€ 0์ผ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

์˜ˆ์™ธ ํ•ธ๋“ค๋ง ๋ฐฉ๋ฒ•?

ํŠน์ • ์—๋Ÿฌ๋งŒ ํ•ธ๋“ค๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—๋Ÿฌ ๊ฐ์ฒด์˜ ์ด๋ฆ„์„ except ์˜†์— ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

  • ์˜ˆ) except ValueError:

๋˜, ํŠœํ”Œ ํ˜•ํƒœ๋กœ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ๋งŒ์•ฝ except์ ˆ ์˜†์— ์•„๋ฌด ๊ฒƒ๋„ ์—†๋‹ค๋ฉด, ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์—๋Ÿฌ๋ฅผ ํ•ธ๋“ค๋งํ•œ๋‹ค. โ†’ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•œ ๋ฐฉ๋ฒ•

  • ์˜ˆ) except (ZeroDivisionError, OverflowError):

๋งŒ์•ฝ ์—๋Ÿฌ๋ฅผ ์ œ๋„ค๋ฆญํ•˜๊ฒŒ ๋ฐ›๊ณ  ์‹ถ์œผ๋ฉด Exception as e ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์˜ˆ) except Exception as e:

๊ทธ๋Ÿผ raise๊ฐ€ ๋ญ˜๊นŒ?

raise๋Š” ์ธ์œ„์ ์œผ๋กœ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

raise๋Š” ๊ผญ try์™€ ํ•จ๊ป˜ ์“ฐ์—ฌ์•ผํ•˜๋Š” ๊ฒƒ๋งŒ์€ ์•„๋‹ˆ๋‹ค!

๋งŒ์•ฝ try ์ ˆ์— ์“ฐ์ธ ๊ฒฝ์šฐ, try์ ˆ์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๋„์ค‘์— ์˜ˆ์™ธ๋ฅผ ์ฐพ์œผ๋ฉด ์ฆ‰์‹œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

์•„๋ž˜๋Š” try, except, raise์˜ ์˜ˆ์‹œ๋‹ค.

def three_multiple():
    try:
        x = int(input('3์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: '))
        if x % 3 != 0:                                 # x๊ฐ€ 3์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉด
            raise Exception('3์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.')    # ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด
        print(x)
    except Exception as e:                             # ํ•จ์ˆ˜ ์•ˆ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•จ
        print('three_multiple ํ•จ์ˆ˜์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.', e)
        raise    # raise๋กœ ํ˜„์žฌ ์˜ˆ์™ธ๋ฅผ ๋‹ค์‹œ ๋ฐœ์ƒ์‹œ์ผœ์„œ ์ƒ์œ„ ์ฝ”๋“œ ๋ธ”๋ก์œผ๋กœ ๋„˜๊น€
 
try:
    three_multiple()
except Exception as e:                                 # ํ•˜์œ„ ์ฝ”๋“œ ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์‹คํ–‰๋จ
    print('์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.', e)

์ฐธ๊ณ  ์ž๋ฃŒ

ํŒŒ์ด์ฌ ์ฝ”๋”ฉ ๋„์žฅ: 38.3 ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ

Python์—์„œ try, except, raise๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ•˜๊ธฐ.

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ