์ธ๊ณต์ง€๋Šฅ๐Ÿพ/ํŒŒ์ด์ฌ ๊ธฐ๋ณธ

[ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ๊ฐœ๋…] ์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception Handling)

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 1. 27. 08:27
728x90

* ์ด ๊ธ€์€ ๋„ค์ด๋ฒ„ ๋ถ€์ŠคํŠธ ์ฝ”์Šค์˜ ์ธ๊ณต์ง€๋Šฅ(AI) ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

์˜ˆ์™ธ์ฒ˜๋ฆฌ ์‚ฌ์šฉ ๋ชฉ์  : ์ž˜๋ชป๋œ ์ƒํ™ฉ์— ๋Œ€์ฒ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

1. try~except ๊ตฌ๋ฌธ : ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•

 

์‚ฌ์šฉ๋ฐฉ๋ฒ•

try:
	๊ฒ€์ฆํ•ด์•ผํ•˜๋Š” ์ฝ”๋“œ
except<ExceptionType1>:
	์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ ๋Œ€์‘์ฝ”๋“œ1
except<ExceptionType2>:
	์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ ๋Œ€์‘์ฝ”๋“œ2
...
except Exceptions as e:
	์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ ๋Œ€์‘์ฝ”๋“œ3
else:
	์ •์ƒ์ž‘๋™์‹œ ๋Œ€์‘์ฝ”๋“œ
finally:
	์˜ˆ์™ธ ๋ฐœ์ƒ๊ณผ ๊ด€๊ณ„์—†์ด ์ˆ˜ํ–‰๋˜๋Š” ์ฝ”๋“œ

ํŠน์ง•

- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ

- ์ „์ฒด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ

except Exceptions as e:

cf) Exceptions๋กœ ์ „์ฒด ์—๋Ÿฌ์— ๋Œ€์‘ํ•˜๋Š”๊ฒƒ์€ ์ •ํ™•ํžˆ ์–ด๋Š ๋ถ€๋ถ„๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ง€์–‘ํ•  ๊ฒƒ

 

- ์˜ˆ์™ธ์™€ ๊ด€๊ณ„์—†์ด ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ

finally:

 

์˜ˆ์ œ) 0์œผ๋กœ ์ˆซ์ž๋ฅผ ๋‚˜๋ˆŒ๋•Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด ๋ณด์ž.

1
2
3
4
try:
    print(10/0)
except ZeroDivisionError:
    print("Should not divided by 0")
cs

 

- Build-in Exceptinon : ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ

IndexError
NameError
ZeroDivisionError
ValueError
FileNotFoundError

 

 

2. raise ๊ตฌ๋ฌธ : ํ•„์š”์— ๋”ฐ๋ผ ๊ฐ•์ œ๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ธฐ๋ฒ•

 

์‚ฌ์šฉ๋ฐฉ๋ฒ•

raise <Exception Type>(์˜ˆ์™ธ์ •๋ณด)

 

์˜ˆ์ œ) ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

1
2
if digit not in "0123456789":
    raise ValueError("์ˆซ์ž๊ฐ’์„์ž…๋ ฅํ•˜์ง€์•Š์œผ์…จ์Šต๋‹ˆ๋‹ค")
cs

 

3. assert ๊ตฌ๋ฌธ : ํŠน์ • ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ธฐ๋ฒ•

- ๋ณดํ†ต ํ•จ์ˆ˜์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ type์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ์‹œ ๋งŽ์ด ์‚ฌ์šฉ

 

์‚ฌ์šฉ๋ฐฉ๋ฒ•

assert <์˜ˆ์™ธ์กฐ๊ฑด>
or
assert ํ•จ์ˆ˜ ## ํ•จ์ˆ˜ ์กฐ๊ฑด์ด False์ด๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด

 

์˜ˆ์ œ) ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

๊ตฌํ˜„1

1
2
3
4
def get_float_number(number): ##number๊ฐ€ string์œผ๋กœ ์ฃผ์–ด์กŒ์„๋•Œ
    for digit in number:
        if digit not in "0123456789":
            assert ValueError("์—๋Ÿฌ๋‚ด์šฉ")
cs

๊ตฌํ˜„2

1
2
def get_float_number(number): ##number๊ฐ€ int๋กœ ์ฃผ์–ด์กŒ์„๋•Œ
    assert(number, int)
cs

 

cf) Type Annotation/Hinting

- ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํƒ€์ž…์— ๋Œ€ํ•œ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š”๊ฒƒ์œผ๋กœ ํƒ€์ž…์— ๋Œ€ํ•œ ํ‘œ์‹œ๋ฅผ ํ‘œ์ค€ํ™”์‹œํ‚จ๊ฒƒ- ํƒ€์ž…์ด ํ‹€๋ ธ๋‹ค๊ณ  ํ•ด์„œ ๊ฒฝ๊ณ ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋Š” ์•Š์Œ

  •  ๋ณ€์ˆ˜ ํƒ€์ž… ํžŒํŒ… ๋ฐฉ๋ฒ• : (์ฝœ๋ก )
๋ณ€์ˆ˜๋ช… : ํƒ€์ž…์ข…๋ฅ˜ = ๋ณ€์ˆ˜๊ฐ’

์‚ฌ์šฉ ์˜ˆ์‹œ
title: str = "The ordinary day"
  • ํ•จ์ˆ˜ ํƒ€์ž… ํžŒํŒ… ๋ฐฉ๋ฒ•
    • ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…  : (์ฝœ๋ก )
    • ๋ฐ˜ํ™˜ ํƒ€์ž… -> (ํ™”์‚ดํ‘œ)
def ํ•จ์ˆ˜๋ช…(ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜: ํƒ€์ž…์ข…๋ฅ˜, ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜: ํƒ€์ž…์ข…๋ฅ˜ = ๊ธฐ๋ณธ๊ฐ’) -> ๋ฐ˜ํ™˜ ํƒ€์ž…์ข…๋ฅ˜:

์‚ฌ์šฉ ์˜ˆ์‹œ
def intsum(num1:int, num2:int=0)->int:

 

728x90